home *** CD-ROM | disk | FTP | other *** search
/ Amiga Collections: Amiga Club Hoorn / ACH ClubDiskette No.24 (1995-06)(Amiga Club Hoorn)(NL).zip / ACH ClubDiskette No.24 (1995-06)(Amiga Club Hoorn)(NL).adf / WB2 / Guru3.0.lha / guru3.0 - english / sources / Guru30.s < prev    next >
Text File  |  1994-11-13  |  46KB  |  2,730 lines

  1. * The Guru 3.0
  2. *
  3. * The program to make guru messages understandable !!
  4. *
  5. * Features :    Fully font-sensitive intuition-based front end
  6. *        Good descriptions
  7. *        Looks cool on ALL workbenches (2 to 256 col, palette sensitive)
  8. *        2.0+ compatible, 680x0 compatible
  9. *        1.2/1.3 compatible (mostly)
  10. *        Awfully delayed
  11. *
  12. * Code & design: Emiel Lensink
  13. * Created using: A3000, kick 3.1, 2Mb chip, 12Mb fast
  14. *         Piccolo graphics card
  15. *         Devpac 3.04
  16. *         PPaint 6.0
  17. *         The Ultimate Graphics Convertor (also by me, but not completely finished (yet))
  18. *
  19. * Thanx to:    Commodore (RIP) for the AMIGA
  20. *
  21. **********************************************************************************************
  22.  
  23. * Version stuff
  24.     bra.s    ProgBits
  25.     dc.b    ' $VER: TheGuru 3.00 $',10,0
  26.     dc.b    ' $COPYRIGHT: Copyright © 1994 by Emiel Lensink$',0
  27.     cnop    0,4
  28. ProgBits
  29.  
  30. * Includese
  31.  
  32.     include    exec/exec.i
  33.     include exec/exec_lib.i        
  34.     include    intuition/intuition.i        
  35.     include    intuition/intuition_lib.i
  36.     include graphics/graphics_lib.i
  37.     include graphics/gfx.i
  38.     include dos/dos.i
  39.     include dos/dos_lib.i
  40.     include workbench/startup.i
  41.     include workbench/icon_lib.i
  42.     include workbench/workbench.i
  43.     
  44.     include /subs/easystart.i
  45.     
  46. * Libraries
  47.  
  48.     move.w        #4,a0
  49.     move.l        (a0),a1
  50.     move.w     LIB_VERSION(a1),Execvers
  51.     
  52.     moveq        #0,d0            Open Intuition
  53.     lea        Intname,a1
  54.     CALLEXEC    OpenLibrary
  55.     move.l        d0,_IntuitionBase
  56.     beq        NoInt
  57.  
  58.     moveq        #0,d0            Open Graphics
  59.     lea        Gfxname,a1
  60.     CALLEXEC    OpenLibrary
  61.     move.l        d0,_GfxBase
  62.     beq        NoGfx
  63.  
  64.     moveq        #0,d0            Open DOS
  65.     lea        Dosname,a1
  66.     CALLEXEC    OpenLibrary
  67.     move.l        d0,_DOSBase
  68.     beq        NoDos            
  69.  
  70.     moveq        #120,d0
  71.     move.l        #MEMF_ANY!MEMF_CLEAR,d1
  72.     CALLEXEC    AllocMem
  73.     move.l        d0,FakeRast
  74.     beq        NoFRast    
  75.  
  76. * setup stuff
  77.  
  78.     tst.l        returnMsg        Workbench ?
  79.     beq        CliStart
  80.     
  81.     move.l        returnMsg,a3
  82.     move.l        sm_ArgList(a3),a3
  83.     move.l        (a3),d1        
  84.     CALLDOS        CurrentDir        (offset 0:wa_Lock) CD to program startup dir.
  85.  
  86.     lea        Iconname,a1        Open icon library        
  87.     moveq        #0,d0
  88.     CALLEXEC    OpenLibrary
  89.     move.l        d0,_IconBase
  90.     beq        CliStart        No icon library
  91.     
  92.     move.l        returnMsg,a3
  93.     move.l        sm_ArgList(a3),a3
  94.     move.l        wa_Name(a3),a0
  95.     CALLICON    GetDiskObject        ¯|
  96.     move.l        d0,a5             V
  97.     tst.l        d0            Did we get it ?
  98.     beq        NoDiskO
  99.  
  100.     move.l        do_ToolTypes(a5),a0    Check tooltypes
  101.     lea        Language,a1        = [LANGUAGE]        
  102.     CALLICON    FindToolType
  103.     tst.l        d0
  104.     beq.s        DefLF
  105.     
  106.     move.l        d0,a0            Pointer naar f'name
  107.     bsr        LoadFile
  108.     tst.l        d0
  109.     beq.s        DefLF
  110.     move.l        d0,LangSize
  111.     move.l        a0,LangBuff
  112.     bsr        DecodeLF
  113.  
  114. DefLF    move.l        do_ToolTypes(a5),a0    Check tooltypes
  115.     lea        DataFile,a1        = [DATAFILE=]        
  116.     CALLICON    FindToolType
  117.     tst.l        d0
  118.     beq.s        DefDF
  119.     
  120.     move.l        d0,a0            Pointer naar f'name
  121.     bsr        LoadFile
  122.     tst.l        d0
  123.     beq.s        DefDF
  124.     move.l        d0,DataSize
  125.     move.l        a0,DataBuff
  126.  
  127. DefDF    move.l        do_ToolTypes(a5),a0    Check tooltypes
  128.     lea        ForceTopaz,a1        = [TOPAZ]        
  129.     CALLICON    FindToolType
  130.     tst.l        d0
  131.     beq.s        NoTOPAZ
  132.     move.b        #1,tt_Topaz
  133.  
  134. NoTOPAZ    move.l        do_ToolTypes(a5),a0    Check tooltypes
  135.     lea        AutoFront,a1        = [AUTOTOFRONT]        
  136.     CALLICON    FindToolType
  137.     tst.l        d0
  138.     beq.s        NoATFR
  139.     move.b        #1,tt_AutoFront
  140.     
  141. NoATFR    cmpi.w        #36,Execvers
  142.     blt.s        .kickskip
  143.  
  144.     move.l        do_ToolTypes(a5),a0
  145.     lea        PubScr,a1        = [PUBSCREEN=]
  146.     CALLICON    FindToolType
  147.     tst.l        d0
  148.     beq.s        NoPUBS
  149.     move.b        #1,tt_PubScreen
  150.     
  151.     move.l        d0,a0
  152.     CALLINT        LockPubScreen
  153.     move.l        d0,ScreenLock
  154.     beq.s        TTNoLock
  155.     bra.s        NoPUBS
  156.  
  157. .kickskip
  158.  
  159. TTNoLock
  160.     move.b        #0,tt_PubScreen        lock failed, use wb
  161.         
  162. NoPUBS    move.l        a5,a0
  163.     CALLICON    FreeDiskObject
  164.  
  165. NoDiskO    move.l        _IconBase,a1
  166.     CALLEXEC    CloseLibrary
  167.  
  168. CliStart
  169.     cmpi.l        #0,DataSize
  170.     bne.s        .skip2
  171.     lea        DefData,a0
  172.     bsr        LoadFile
  173.     tst.l        d0
  174.     beq        NoDATAErr        Could load no guru data file
  175.     move.l        d0,DataSize
  176.     move.l        a0,DataBuff
  177.  
  178. .skip2    move.l        DataBuff,a1
  179.     move.l        a1,a2
  180.     add.l        DataSize,a2
  181.     
  182.     lea        GenAl,a0
  183.     bsr        Search
  184.     move.l        a0,d0
  185.     cmpi.l        #0,d0
  186.     beq        ErrInDATAErr
  187.     move.l        a0,GeneralAlert
  188.     
  189.     lea        Sub1,a0
  190.     bsr        Search
  191.     move.l        a0,d0
  192.     cmpi.l        #0,d0
  193.     beq        ErrInDATAErr
  194.     move.l        a0,Subsys1
  195.  
  196.     lea        Sub2,a0
  197.     bsr        Search
  198.     move.l        a0,d0
  199.     cmpi.l        #0,d0
  200.     beq        ErrInDATAErr
  201.     move.l        a0,Subsys2
  202.  
  203.     lea        Sub3,a0
  204.     bsr        Search
  205.     move.l        a0,d0
  206.     cmpi.l        #0,d0
  207.     beq        ErrInDATAErr
  208.     move.l        a0,Subsys3
  209.  
  210.     lea        DosAl,a0
  211.     bsr        Search
  212.     move.l        a0,d0
  213.     cmpi.l        #0,d0
  214.     beq        ErrInDATAErr
  215.     move.l        a0,DosAlert
  216.  
  217.     lea        UnkGuru,a0
  218.     bsr        Search
  219.     move.l        a0,d0
  220.     cmpi.l        #0,d0
  221.     beq        ErrInDATAErr
  222.     move.l        a0,UnknownGuru
  223.     
  224.     lea        UnkDos,a0
  225.     bsr        Search
  226.     move.l        a0,d0
  227.     cmpi.l        #0,d0
  228.     beq        ErrInDATAErr
  229.     move.l        a0,UnknownDos
  230.         
  231.     lea        Dead,a0
  232.     bsr        Search
  233.     move.l        a0,d0
  234.     cmpi.l        #0,d0
  235.     beq        ErrInDATAErr
  236.     move.l        a0,Deadend
  237.  
  238.     lea        Reco,a0
  239.     bsr        Search
  240.     move.l        a0,d0
  241.     cmpi.l        #0,d0
  242.     beq        ErrInDATAErr
  243.     move.l        a0,Recovery
  244.  
  245.     lea        EndFile,a0
  246.     bsr        Search
  247.     move.l        a0,d0
  248.     cmpi.l        #0,d0
  249.     beq        ErrInDATAErr
  250.     move.l        a0,EndOfFile
  251.     
  252.     bsr        FilterFile
  253.  
  254.     cmpi.b        #1,tt_PubScreen
  255.     beq.s        .skip3
  256.     
  257.     cmpi.w        #36,Execvers
  258.     blt.s        .kickskip
  259.  
  260.     lea        0.w,a0
  261.     CALLINT        LockPubScreen
  262.     move.l        d0,ScreenLock
  263.     beq        NoScLock
  264.     bra.s        .skip3
  265.  
  266. .kickskip
  267.     lea        TempPrintBuff,a0
  268.     move.l        #2000,d0
  269.     moveq        #WBENCHSCREEN,d1
  270.     lea        0.w,a1
  271.     CALLINT        GetScreenData
  272.     lea        TempPrintBuff,a0
  273.     move.l        a0,ScreenLock
  274.             
  275. .skip3    move.l        ScreenLock,a0
  276.     move.l        sc_Font(a0),ScreenFont        Get the font 
  277.  
  278.     cmpi.b        #1,tt_Topaz
  279.     bne.s        .skipx
  280.     lea        Topaz,a6
  281.     move.l        a6,ScreenFont
  282.  
  283. .skipx    moveq        #0,d0                Get sizes of windowborders
  284.     moveq        #0,d1
  285.     move.b        sc_WBorTop(a0),d0
  286.     move.b        sc_WBorLeft(a0),d1
  287.     move.l        sc_Font(a0),a0
  288.     move.w        ta_YSize(a0),d2
  289.     add.w        d2,d0
  290.     addq.w        #1,d0
  291.     move.w        d1,LeftBorder
  292.     move.w        d0,TopBorder
  293.  
  294.     move.l        ScreenFont,a0
  295.     CALLGRAF    OpenFont
  296.     move.l        d0,Font
  297.     beq        NoFont
  298.  
  299.     move.l        FakeRast,a1
  300.     CALLGRAF    InitRastPort
  301.  
  302.     move.l        Font,a0
  303.     move.l        FakeRast,a1
  304.     CALLGRAF    SetFont    
  305.  
  306.     bsr        WidestText            Find widest text
  307.     bsr        WidestLetter            Find widest letter
  308.     bsr        WidestArrow            Find widest arrow
  309.  
  310.     move.l        Font,a0
  311.     moveq        #0,d0
  312.     move.w        tf_YSize(a0),d0
  313.     move.w        d0,FontY    
  314.     move.w        tf_Baseline(a0),d0
  315.     move.w        d0,FontBase
  316.  
  317.     move.l        ScreenLock,WinScreen
  318.  
  319.     lea        Window1.3,a4
  320.     lea        WinTags,a0
  321.     move.w        FontY,d0
  322.     mulu.w        #13,d0
  323.     add.w        #36,d0
  324.     move.l        d0,28(a0)    
  325.  
  326.     add.w        TopBorder,d0
  327.     addq.w        #3,d0
  328.     move.w        d0,6(a4)
  329.     subq.w        #3,d0
  330.     
  331.     divu.w        #2,d0
  332.     move.l        ScreenLock,a1
  333.     move.w        sc_Height(a1),d1
  334.     divu.w        #2,d1
  335.     sub.w        d0,d1
  336.     move.w        d1,14(a0)
  337.     move.w        d1,2(a4)
  338.  
  339.     cmpi.w        #0,d1
  340.     blt        FontTooBig
  341.  
  342.     move.l        Widest,d0
  343.     mulu.w        #3,d0
  344.     add.w        #84,d0
  345.     move.l        WidLett,d1
  346.     mulu.w        #4,d1
  347.     add.w        d1,d0
  348.     move.l        d0,20(a0)
  349.     add.w        LeftBorder,d0
  350.     add.w        LeftBorder,d0
  351.     move.w        d0,4(a4)
  352.     sub.w        LeftBorder,d0
  353.     sub.w        LeftBorder,d0
  354.  
  355.     move.l        d0,WindowWidth
  356.  
  357.     move.l        d0,d6
  358.     divu.w        #2,d0
  359.     add.w        LeftBorder,d0
  360.     move.w        sc_Width(a1),d1
  361.     divu.w        #2,d1
  362.     sub.w        d0,d1
  363.     move.w        d1,6(a0)    
  364.     move.w        d1,(a4)
  365.  
  366.     cmpi.w        #0,d1
  367.     blt        FontTooBig
  368.  
  369.     move.l        d6,d0
  370.  
  371. CalcBm    lea        FakeBitmap,a0
  372.     sub.w        #22,d0
  373.     move.l        d0,DisplayWidth
  374.     divu.w        #16,d0
  375.     move.w        d0,d1
  376.     andi.l         #$0000FFFF,d1
  377.     swap        d0
  378.     cmpi.w        #0,d0
  379.     beq.s        .skip
  380.     addq.l        #1,d1
  381.  
  382. .skip    mulu        #2,d1                Don't know why, bitmap HAS to be word-
  383.     move.w        d1,(a0)                aligned with even nr of words (?)
  384.     move.w        FontY,d0
  385.     mulu.w        #35,d0
  386.     move.w        d0,bm_Rows(a0)
  387.     andi.l         #$0000FFFF,d0
  388.     move.l        a0,a5
  389.  
  390.     mulu        d1,d0
  391.     move.l        d0,FakeBmSize    
  392.     move.l        #MEMF_CHIP!MEMF_CLEAR,d1
  393.     CALLEXEC    AllocMem
  394.     move.l        d0,FakeBmPtr
  395.     beq        NoFakeBm
  396.     
  397.     move.l        d0,8(a5)
  398.     
  399.     move.l        FakeRast,a1
  400.     lea        FakeBitmap,a0
  401.     move.l        a0,rp_BitMap(a1)
  402.  
  403.     cmpi.w        #36,Execvers
  404.     blt.s        .kickskip
  405.  
  406.     lea        0.w,a0                Open Window 2.0    
  407.     lea        WinTags,a1
  408.     CALLINT        OpenWindowTagList
  409.     move.l        d0,WindowPtr
  410.     beq        NoWin
  411.     bra.s        .kickskip2
  412.     
  413. .kickskip
  414.     lea        Window1.3,a0
  415.     CALLINT        OpenWindow
  416.     move.l        d0,WindowPtr
  417.     beq        NoWin
  418.  
  419. .kickskip2
  420.      move.l        WindowPtr,a0
  421.     move.l        wd_RPort(a0),WindowRastPort
  422.     move.l        wd_UserPort(a0),WindowUserPort
  423.  
  424.     move.l        wd_WScreen(a0),a0
  425.     lea        sc_ViewPort(a0),a0
  426.     move.l        vp_ColorMap(a0),ScreenColorMap
  427.     
  428.     move.l        WindowPtr,a0
  429.     move.l        wd_WScreen(a0),a0
  430.     lea        sc_RastPort(a0),a0
  431.     move.l        rp_BitMap(a0),a0
  432.     moveq        #0,d0
  433.     move.b        bm_Depth(a0),d0
  434.     move.b        d0,ScreenDepth
  435.  
  436.     move.l        Font,a0
  437.     move.l        WindowRastPort,a1
  438.     CALLGRAF    SetFont    
  439.  
  440.     bsr        DoBorders            Bordersize
  441.     bsr        DoWidths            Gadget widths
  442.     bsr        DoPositions            Position gadgets
  443.     bsr        InsertText            Put text in them
  444.     bsr        CenterText            Center it
  445.     bsr        GadCol
  446.  
  447.     lea        Gad29,a1            Add gadget 29 to the list
  448.     lea        Gad28,a0
  449.     move.l        a1,(a0)
  450.  
  451.     bsr        InitPropGad
  452.  
  453.     move.l        WindowPtr,a0            Draw gadgets
  454.     lea        WinGads,a1
  455.     moveq        #-1,d0
  456.     moveq        #-1,d1
  457.     move.w        #0,a2
  458.     CALLINT        AddGList
  459.  
  460.     lea        WinGads,a0
  461.     move.l        WindowPtr,a1
  462.     move.w        #0,a2
  463.     moveq        #-1,d0
  464.     CALLINT        RefreshGList
  465.  
  466.     bsr        InitIndCoords
  467.     bsr        SubRefresh
  468.  
  469.     bsr        DrawLogo
  470. * Main core
  471.  
  472. Mainloop move.l        WindowUserPort,a0
  473.     CALLEXEC    WaitPort
  474.  
  475. Message    move.l        WindowUserPort,a0
  476.     CALLEXEC    GetMsg
  477.     tst.l        d0
  478.     beq.s        Mainloop        ; no more msgs
  479.     
  480.     move.l        d0,a1
  481.     move.l        im_Class(a1),d2        ; Soort msg
  482.     move.l        im_IAddress(a1),a2    ; naar gadget
  483.     move.w        im_Code(a1),d3
  484.     move.w        im_Qualifier(a1),d4
  485.     CALLEXEC    ReplyMsg
  486.     
  487.     cmpi.l        #IDCMP_CLOSEWINDOW,d2    ; close gadget ?
  488.     beq.s        Quit
  489.     
  490.     cmpi.l        #IDCMP_GADGETUP,d2
  491.     beq        Gadgets
  492.     
  493.     cmpi.l        #IDCMP_GADGETDOWN,d2
  494.     beq        Slider
  495.  
  496.     cmpi.l        #IDCMP_ACTIVEWINDOW,d2
  497.     beq        ToFront
  498.  
  499.     cmpi.l        #IDCMP_NEWSIZE,d2
  500.     beq        Refresh
  501.  
  502.     cmpi.l        #IDCMP_VANILLAKEY,d2
  503.     beq        KeyBoard
  504.  
  505.     cmpi.l        #IDCMP_RAWKEY,d2
  506.     beq        KeyBoard2
  507.  
  508.     bra.s        Message
  509.  
  510. * Close down
  511.  
  512.  
  513. Quit    move.l        WindowPtr,a0
  514.     CALLINT        CloseWindow
  515.  
  516. NoWin    move.l        FakeBmSize,d0
  517.     move.l        FakeBmPtr,a1
  518.     CALLEXEC    FreeMem
  519. NoFakeBm
  520.     move.l        Font,a1
  521.     CALLGRAF    CloseFont
  522.  
  523. NoFont    cmpi.w        #36,Execvers
  524.     blt.s        .kickskip
  525.  
  526.     lea        0.w,a0
  527.     move.l        ScreenLock,a1
  528.     CALLINT        UnlockPubScreen
  529. .kickskip
  530.  
  531. NoScLock
  532.     move.l        DataSize,d0
  533.     move.l        DataBuff,a1
  534.     CALLEXEC    FreeMem
  535.  
  536. NoDataFile
  537.     cmpi.l        #0,LangSize
  538.     beq.s        .skip
  539.     move.l        LangSize,d0
  540.     move.l        LangBuff,a1
  541.     CALLEXEC    FreeMem
  542. .skip
  543. NoLangFile
  544.     moveq        #120,d0
  545.     move.l        FakeRast,a1
  546.     CALLEXEC    FreeMem
  547.  
  548. NoFRast    move.l        _DOSBase,a1
  549.     CALLEXEC    CloseLibrary
  550.  
  551. NoDos    move.l        _GfxBase,a1
  552.     CALLEXEC    CloseLibrary    
  553.  
  554. NoGfx    move.l        _IntuitionBase,a1
  555.     CALLEXEC    CloseLibrary
  556.     
  557. NoInt    moveq        #0,d0
  558.     rts
  559.  
  560. ** Keyboard handling
  561. KeyBoard
  562.     cmpi.b        #'>',d3
  563.     beq        KeyRight
  564.     cmpi.b        #'.',d3
  565.     beq        KeyRight
  566.     
  567.     cmpi.b        #'<',d3
  568.     beq        KeyLeft
  569.     cmpi.b        #',',d3
  570.     beq        KeyLeft
  571.     
  572.     cmpi.b        #9,d3
  573.     beq        KeySwitch
  574.  
  575.     cmpi.b        #'0',d3        0-9
  576.     blt.s        .skip1
  577.     cmpi.b        #'9',d3
  578.     bgt.s        .skip1
  579.     moveq        #0,d2    
  580.     sub.b        #'0',d3
  581.     addq.b        #1,d3
  582.     move.b        d3,d2
  583.     bra        PrGads
  584.  
  585. .skip1    cmpi.b        #'a',d3        Upper$
  586.     blt.s        .skip2
  587.     cmpi.b        #'z',d3
  588.     bgt.s        .skip2
  589.     moveq        #0,d2    
  590.     sub.b        #32,d3
  591.  
  592. .skip2    cmpi.b        #'A',d3        A-F
  593.     blt.s        .skip3
  594.     cmpi.b        #'F',d3
  595.     bgt.s        .skip3
  596.     moveq        #0,d2    
  597.     sub.b        #'A',d3
  598.     add.b        #11,d3
  599.     move.b        d3,d2
  600.     bra        PrGads
  601.  
  602. .skip3    cmpi.b        #13,d3        Enter = search
  603.     beq        KeyEnter
  604.  
  605.     lea        KeyGURU,a0
  606.     move.l        (a0),a0
  607.     move.b        (a0),d2
  608.     cmp.b        d2,d3
  609.     beq        Gadg23
  610.  
  611.     lea        KeyDEFAULT,a0
  612.     move.l        (a0),a0
  613.     move.b        (a0),d2
  614.     cmp.b        d2,d3
  615.     beq        Gadg26
  616.  
  617.     lea        KeyDOS,a0
  618.     move.l        (a0),a0
  619.     move.b        (a0),d2
  620.     cmp.b        d2,d3
  621.     beq        Gadg25
  622.  
  623.     lea        KeyLAST,a0
  624.     move.l        (a0),a0
  625.     move.b        (a0),d2
  626.     cmp.b        d2,d3
  627.     beq        Gadg24
  628.  
  629.     lea        KeyABOUT,a0
  630.     move.l        (a0),a0
  631.     move.b        (a0),d2
  632.     cmp.b        d2,d3
  633.     beq        Gadg28
  634.  
  635.     lea        KeyQUIT,a0
  636.     move.l        (a0),a0
  637.     move.b        (a0),d2
  638.     cmp.b        d2,d3
  639.     beq        Quit
  640.  
  641.     bra        Message
  642.  
  643.  
  644. KeyBoard2
  645.     cmpi.b        #78,d3
  646.     beq.s        KeyRight
  647.     
  648.     cmpi.b        #79,d3
  649.     beq.s        KeyLeft
  650.  
  651.     cmpi.b        #76,d3
  652.     beq.s        KeyUp
  653.  
  654.     cmpi.b        #77,d3
  655.     beq.s        KeyDown
  656.  
  657.     bra        Message
  658.     
  659.  
  660. KeyLeft
  661.     cmpi.b        #0,DosOffset        is guru display if true
  662.     beq        Gadg17
  663.     bra        Gadg19
  664.  
  665. KeyRight
  666.     cmpi.b        #0,DosOffset
  667.     beq        Gadg18
  668.     bra        Gadg20
  669.  
  670. KeySwitch
  671.     cmpi.b        #0,DosOffset
  672.     beq        Gadg22
  673.     bra        Gadg21
  674.  
  675. KeyEnter
  676.     cmpi.b        #0,DosOffset
  677.     beq        Gadg23
  678.     bra        Gadg25
  679.  
  680. KeyUp    bsr        ScrollUp
  681.     bra        Message
  682.  
  683. KeyDown    bsr        ScrollDown
  684.     bra        Message
  685.  
  686. ** Gadget handling (not slider!)
  687. Gadgets    move.w        gg_GadgetID(a2),d2    Which gadget
  688.     
  689. PrGads    cmpi.w        #0,d2
  690.     ble        Message
  691.  
  692.     cmpi.w        #17,d2
  693.     blt.s        NumGad        
  694.  
  695.  
  696.     cmpi.w        #17,d2
  697.     beq        Gadg17
  698.     cmpi.w        #18,d2
  699.     beq        Gadg18
  700.     cmpi.w        #19,d2
  701.     beq        Gadg19
  702.     cmpi.w        #20,d2
  703.     beq        Gadg20
  704.  
  705.     cmpi.w        #21,d2
  706.     beq        Gadg21
  707.     cmpi.w        #22,d2
  708.     beq        Gadg22
  709.  
  710.     cmpi.w        #23,d2
  711.     beq        Gadg23
  712.  
  713.     cmpi.w        #24,d2
  714.     beq        Gadg24
  715.     cmpi.w        #25,d2
  716.     beq        Gadg25
  717.     cmpi.w        #26,d2
  718.     beq        Gadg26
  719.  
  720.     cmpi.w        #27,d2
  721.     beq        Quit
  722.  
  723.     cmpi.w        #28,d2
  724.     beq        Gadg28
  725.  
  726.     bra        Message
  727.  
  728. NumGad    subq.w        #1,d2
  729.     cmpi.b        #0,GuruOffset
  730.     beq.s        .dosnum    
  731.  
  732.     cmpi.w        #10,d2
  733.     bge.s        .hexgad
  734.  
  735.     lea        GuruString,a0
  736.     moveq        #0,d0
  737.     move.b        GuruOffset,d0
  738.     subq.b        #1,d0
  739.     add.l        d0,a0
  740.  
  741.     move.b        #'0',d0
  742.     add.b        d2,d0
  743.     move.b        d0,(a0)
  744.     bra.s        Gadg18
  745.     
  746. .hexgad    sub.w        #10,d2
  747.     lea        GuruString,a0
  748.     moveq        #0,d0
  749.     move.b        GuruOffset,d0
  750.     subq.b        #1,d0
  751.     add.l        d0,a0
  752.  
  753.     move.b        #'A',d0
  754.     add.b        d2,d0
  755.     move.b        d0,(a0)
  756.     bra.s        Gadg18
  757.  
  758. .dosnum    lea        DosString,a0
  759.     moveq        #0,d0
  760.     move.b        DosOffset,d0
  761.     subq.b        #1,d0
  762.     add.l        d0,a0
  763.     cmpi.w        #9,d2
  764.     bgt        Message
  765.     
  766.     move.b        #'0',d0
  767.     add.b        d2,d0
  768.     move.b        d0,(a0)
  769.     bra.s        Gadg20
  770.     
  771. Gadg17    bsr        ActiGur
  772.     subq.b        #1,GuruOffset
  773.     cmpi.b        #0,GuruOffset
  774.     bne.s        .skip
  775.     move.b        #8,GuruOffset
  776. .skip    bsr        UpdGuru
  777.     bra        Message    
  778.  
  779. Gadg18    bsr.s        ActiGur
  780.     addq.b        #1,GuruOffset
  781.     cmpi.b        #9,GuruOffset
  782.     bne.s        .skip
  783.     move.b        #1,GuruOffset
  784. .skip    bsr        UpdGuru
  785.     bra        Message    
  786.  
  787. Gadg19    bsr        ActiDos
  788.     subq.b        #1,DosOffset
  789.     cmpi.b        #0,DosOffset
  790.     bne.s        .skip
  791.     move.b        #3,DosOffset
  792. .skip    bsr        UpdDos
  793.     bra        Message    
  794.  
  795. Gadg20    bsr.s        ActiDos
  796.     addq.b        #1,DosOffset
  797.     cmpi.b        #4,DosOffset
  798.     bne.s        .skip
  799.     move.b        #1,DosOffset
  800. .skip    bsr        UpdDos
  801.     bra        Message    
  802.  
  803.  
  804. Gadg21    bsr.s        ActiGur
  805.     bra        Message
  806.  
  807. ActiGur    cmpi.b        #0,GuruOffset
  808.     bne.s        .skip
  809.     move.b        DosOffset,DosOffsetTemp
  810.     move.b        GuruOffsetTemp,GuruOffset
  811.     move.b        #0,DosOffset
  812.     move.b        #0,GuruOffsetTemp
  813.     bsr        UpdGuru
  814.     bsr        UpdDos
  815. .skip    rts
  816.  
  817. Gadg22    bsr.s        ActiDos
  818.     bra        Message
  819.  
  820. ActiDos    cmpi.b        #0,DosOffset
  821.     bne.s        .skip
  822.     move.b        DosOffsetTemp,DosOffset
  823.     move.b        GuruOffset,GuruOffsetTemp
  824.     move.b        #0,DosOffsetTemp
  825.     move.b        #0,GuruOffset
  826.     bsr        UpdGuru
  827.     bsr        UpdDos
  828. .skip    rts
  829.  
  830. * retrieves last guru number from the system
  831. Gadg24    * take care ! ... this function works on the current
  832.     * line of amigas (tested upto 2.1)
  833.     * it reads a long on location $100 which is system private ...
  834.     * it may or may not continue to work in the future
  835.     
  836.     * it causes 1 enforcer hit , but don't worry
  837.     * they are only reads , so they won't hurt the system
  838.  
  839.     move.l        $100.w,d0        Enforcer...
  840.     move.l        d0,Temp
  841.  
  842.     lea        Temp,a0
  843.     lea        GuruString,a1
  844.     moveq        #3,d0
  845.  
  846. .loop    move.b        (a0)+,d1
  847.     move.b        d1,d2            
  848.     lsr.b        #4,d1
  849.  
  850.     andi.b        #$f,d1
  851.     andi.b        #$f,d2
  852.     
  853.     cmpi.b        #9,d1
  854.     ble.s        .norm1
  855.     addq.b        #7,d1
  856. .norm1    add.b        #'0',d1
  857.     move.b        d1,(a1)+
  858.  
  859.     cmpi.b        #9,d2
  860.     ble.s        .norm2
  861.     addq.b        #7,d2
  862. .norm2    add.b        #'0',d2
  863.     move.b        d2,(a1)+
  864.  
  865.     dbf        d0,.loop
  866.     
  867.     bsr        UpdGuru
  868.     bra        Message
  869.  
  870.  
  871. Gadg28    bsr        InitPrint
  872.     lea        AboutText,a0
  873.     bsr        Print
  874.     bsr        ResScr
  875.     bra        Message            
  876.  
  877.  
  878. Gadg26    moveq        #7,d0
  879.     lea        GuruString,a0
  880. .loop1    move.b        #'0',(a0)+
  881.     dbf        d0,.loop1
  882.  
  883.     moveq        #2,d0
  884.     lea        DosString,a0
  885. .loop2    move.b        #'0',(a0)+
  886.     dbf        d0,.loop2
  887.     
  888.     move.b        #1,GuruOffset
  889.     move.b        #0,GuruOffsetTemp
  890.     move.b        #0,DosOffset
  891.     move.b        #1,DosOffsetTemp
  892.  
  893.     bsr        DrawLogo
  894.     bsr        UpdGuru
  895.     bsr        UpdDos
  896.     bra        Message
  897.  
  898. Gadg25    ** Search for DOS errors
  899.     bsr        ActiDos
  900.     bsr        InitPrint
  901.     
  902.     lea        DosString,a0
  903.     lea        DosStringTemp,a1
  904.     move.b        (a0)+,(a1)+
  905.     move.b        (a0)+,(a1)+
  906.     move.b        (a0)+,(a1)+
  907.     
  908.     lea        SDosString,a0
  909.     move.l        DosAlert,a1
  910.     move.l        EndOfFile,a2
  911.     bsr        Search
  912.     move.l        a0,d0
  913.     cmpi.l        #0,d0
  914.     beq.s        .notfound    
  915.     bsr        Print
  916.     bsr        ResScr
  917.     bra        Message
  918.     
  919. .notfound
  920.     move.l        UnknownDos,a0
  921.     bsr        Print        
  922.     bsr        ResScr
  923.     bra        Message
  924.     
  925. Gadg23    ** Search for GURU errors
  926.     bsr        ActiGur
  927.     bsr        InitPrint
  928.     
  929.     lea        GuruString,a0
  930.     lea        GuruStringTemp,a1
  931.     lea        SHeaderString,a2
  932.  
  933.     moveq        #7,d0
  934. .loop    move.b        (a0)+,d1
  935.     move.b        d1,(a1)+
  936.     move.b        d1,(a2)+
  937.     dbf        d0,.loop
  938.  
  939.     lea        SGuruHeader,a0
  940.     bsr        Print
  941.  
  942.     move.b        #0,FoundErr
  943.     lea        GuruStringTemp,a1
  944.     move.b        (a1),d0
  945.     cmpi.b        #'@',d0
  946.     blt.s        .nohex
  947.     subi.b        #7,d0
  948. .nohex    subi.b        #'0',d0
  949.     move.b        d0,d1
  950.     btst        #3,d1
  951.     beq.s        .skippie
  952.     move.b        #1,FoundErr    
  953. .skippie
  954.     and.b        #$7,d1
  955.     add.b        #'0',d1
  956.     move.b        d1,(a1)
  957.  
  958.     cmpi.b        #1,FoundErr
  959.     beq.s        .skip
  960.     move.l        Recovery,a0
  961.     bsr        Print
  962.     bra.s        .startsearch
  963. .skip    move.l        Deadend,a0
  964.     bsr        Print
  965.  
  966. .startsearch
  967.     move.b        #0,FoundErr
  968.     lea        SGuruString,a0
  969.     move.l        GeneralAlert,a1
  970.     move.l        Subsys1,a2
  971.     bsr        Search
  972.  
  973.     move.l        a0,d0
  974.     cmpi.l        #0,d0
  975.     beq.s        .notfound    
  976.     bsr        Print
  977.     bsr        ResScr
  978.     bra        Message
  979.     
  980. .notfound
  981.     lea        GuruStringTemp,a1
  982.     addq.l        #2,a1
  983.     moveq        #5,d0
  984. .ss1    move.b        #'0',(a1)+
  985.     dbf        d0,.ss1
  986.     
  987.     lea        SGuruString,a0
  988.     move.l        Subsys1,a1
  989.     move.l        Subsys2,a2
  990.     bsr        Search
  991.  
  992.     move.l        a0,d0
  993.     cmpi.l        #0,d0
  994.     beq.s        .notfound2    
  995.     bsr        Print
  996.     move.b        #1,FoundErr
  997.  
  998. .notfound2
  999.     lea        GuruStringTemp,a1
  1000.     moveq        #7,d0
  1001. .ss2    move.b        #'0',(a1)+
  1002.     dbf        d0,.ss2
  1003.     
  1004.     lea        GuruString,a0
  1005.     lea        GuruStringTemp,a1
  1006.     addq.l        #2,a0
  1007.     addq.l        #2,a1
  1008.     move.b        (a0)+,(a1)+
  1009.     move.b        (a0)+,(a1)+
  1010.  
  1011.     lea        SGuruString,a0
  1012.     move.l        Subsys2,a1
  1013.     move.l        Subsys3,a2
  1014.     bsr        Search
  1015.  
  1016.     move.l        a0,d0
  1017.     cmpi.l        #0,d0
  1018.     beq.s        .notfound3    
  1019.     bsr        Print
  1020.     move.b        #1,FoundErr
  1021.  
  1022. .notfound3
  1023.     lea        GuruStringTemp,a1
  1024.     moveq        #7,d0
  1025. .ss3    move.b        #'0',(a1)+
  1026.     dbf        d0,.ss3
  1027.     
  1028.     lea        GuruString,a0
  1029.     lea        GuruStringTemp,a1
  1030.     addq.l        #4,a0
  1031.     addq.l        #4,a1
  1032.     move.b        (a0)+,(a1)+
  1033.     move.b        (a0)+,(a1)+
  1034.     move.b        (a0)+,(a1)+
  1035.     move.b        (a0)+,(a1)+
  1036.  
  1037.     lea        SGuruString,a0
  1038.     move.l        Subsys3,a1
  1039.     move.l        DosAlert,a2
  1040.     bsr        Search
  1041.  
  1042.     move.l        a0,d0
  1043.     cmpi.l        #0,d0
  1044.     beq.s        .notfound4    
  1045.     bsr.s        Print
  1046.     move.b        #1,FoundErr
  1047.  
  1048. .notfound4
  1049.     bsr        ResScr
  1050.     
  1051.     cmpi.b        #1,FoundErr
  1052.     beq        Message
  1053.  
  1054.     move.l        UnknownGuru,a0
  1055.     bsr.s        Print        
  1056.     bsr        ResScr
  1057.     bra        Message
  1058.     
  1059. * Pop window to front
  1060.  
  1061. ToFront    cmpi.b        #1,tt_AutoFront
  1062.     bne        Message
  1063.     move.l        WindowPtr,a0
  1064.     CALLINT        WindowToFront
  1065.     bra        Message
  1066.  
  1067. * Prints a node in the main window. Inputs a0 points to BEGIN of node (@NODE...)
  1068. * Na printen bsr ResScr
  1069. Print    move.l        a0,a5
  1070.     lea        EndNode,a0
  1071.     move.l        a5,a1
  1072.     move.l        a1,a2
  1073.     lea        3000(a2),a2    Search 3 K
  1074.     bsr        Search
  1075.     move.l        a0,d0
  1076.     cmpi.l        #0,d0
  1077.     beq.s        PrintError
  1078.     move.l        a0,d6        
  1079.  
  1080. .loop1    move.b        (a5)+,d0
  1081.     cmpi.b        #')',d0
  1082.     bne.s        .loop1
  1083.     
  1084.     move.l        a5,d5
  1085.     sub.l        d5,d6        Length of node text
  1086.     cmpi.l        #2560,d6
  1087.     bge.s        PrintError
  1088.  
  1089.     subq.l        #1,d6
  1090.     move.l        a5,a0
  1091.     lea        TempPrintBuff,a1    
  1092.  
  1093. .copyloop
  1094.     move.b        (a0)+,d0
  1095.     cmpi.b        #1,d0
  1096.     beq.s        .skip
  1097.     move.b        d0,(a1)+
  1098. .skip    dbf        d6,.copyloop
  1099.     move.b        #0,(a1)+
  1100.  
  1101.     bsr.s        ActualPrint
  1102.     rts
  1103.     
  1104. PrintError
  1105.     rts    
  1106.     
  1107. ActualPrint
  1108.     lea        TempPrintBuff,a5
  1109.  
  1110.     moveq        #1,d0
  1111.     move.l        FakeRast,a1
  1112.     CALLGRAF    SetAPen
  1113.     
  1114. .dloop    moveq        #0,d0
  1115.     moveq        #0,d1
  1116.     move.w        CursY,d1
  1117.     move.l        FakeRast,a1
  1118.     CALLGRAF    Move
  1119.     move.b        #0,Corrected
  1120.  
  1121.     moveq        #0,d4
  1122.     move.l        a5,a4    
  1123. .lengthloop
  1124.     move.b        (a4)+,d0
  1125.     addq.l        #1,d4
  1126.     
  1127.     cmpi.b        #10,d0
  1128.     beq        .maybelast10
  1129.  
  1130.     cmpi.b        #0,d0
  1131.     beq        .maybelast0
  1132.     bra.s        .lengthloop
  1133.  
  1134. .ret    move.l        FakeRast,a1
  1135.     move.l        a5,a0
  1136.     move.l        d4,d0
  1137.     CALLGRAF    TextLength
  1138.     move.l        DisplayWidth,d1
  1139.     cmp.l        d1,d0
  1140.     ble.s        .drukken
  1141.     
  1142. .wordback
  1143.     move.b        #1,Corrected
  1144.     subq.l        #1,a4
  1145.     subq.l        #1,d4
  1146.     cmpi.b        #' ',(a4)
  1147.     beq.s        .ret
  1148.     bra.s        .wordback
  1149.     
  1150. .drukken
  1151.     move.l        FakeRast,a1
  1152.     move.l        a5,a0
  1153.     move.l        d4,d0
  1154.     move.l        a4,a5
  1155.     CALLGRAF    Text
  1156.     cmpi.b        #1,Corrected
  1157.     bne.s        .skp
  1158.     move.w        FontY,d1
  1159.     add.w        d1,CursY
  1160.  
  1161.     moveq        #0,d0
  1162.     moveq        #0,d1
  1163.     move.w        CursY,d1
  1164.     move.w        FontY,d0
  1165.     mulu.w        #32,d0
  1166.     cmp.w        d0,d1
  1167.     bge.s        .oflo    
  1168.  
  1169. .skp    bra        .dloop                    
  1170.     
  1171. .maybelast10
  1172.     cmpi.l        #1,d4
  1173.     bne.s        .notlast
  1174.  
  1175.     move.w        FontY,d1
  1176.     add.w        d1,CursY
  1177.  
  1178.     moveq        #0,d0
  1179.     moveq        #0,d1
  1180.     move.w        CursY,d1
  1181.     move.w        FontY,d0
  1182.     mulu.w        #32,d0
  1183.     cmp.w        d0,d1
  1184.     bge.s        .oflo    
  1185.  
  1186.     move.l        a4,a5
  1187.     bra        .dloop
  1188.  
  1189. .maybelast0
  1190.     cmpi.l        #1,d4
  1191.     bne.s        .notlast
  1192.     rts
  1193.  
  1194. .notlast
  1195.     subq.l        #1,a4
  1196.     subq.l        #1,d4
  1197.     bra        .ret
  1198.         
  1199. .oflo    rts
  1200.  
  1201. InitPrint
  1202.     bsr        ClrScr
  1203.     move.w        FontBase,d0
  1204.     move.w        d0,CursY
  1205.     rts
  1206.     
  1207. ** Routines, subs and other useful stuff
  1208.  
  1209. NoDATAErr
  1210.     move.l        ErrDTXT,a0
  1211.     move.l        ErrDRTXT,a1
  1212.     lea        0.w,a3
  1213.     bsr        Req
  1214.  
  1215.     cmpi.l        #0,ScreenLock
  1216.     bne.s        .skip
  1217.  
  1218.     lea        0.w,a0
  1219.     move.l        ScreenLock,a1
  1220.     CALLINT        UnlockPubScreen
  1221.  
  1222. .skip    bra        NoDataFile
  1223.  
  1224. ErrInDATAErr
  1225.     move.l        ErrInDTXT,a0
  1226.     move.l        ErrInDRTXT,a1
  1227.     lea        0.w,a3
  1228.     bsr.s        Req
  1229.  
  1230.     cmpi.l        #0,ScreenLock
  1231.     bne.s        .skip
  1232.  
  1233.     lea        0.w,a0
  1234.     move.l        ScreenLock,a1
  1235.     CALLINT        UnlockPubScreen
  1236.  
  1237. .skip    bra        NoScLock
  1238.  
  1239.  
  1240. DecodeLF
  1241.     move.l        LangSize,d0
  1242.     subq.l        #1,d0
  1243.     move.l        LangBuff,a0
  1244.     lea        IDTXT,a1
  1245.     move.l        a0,(a1)+
  1246. .loop    move.b        (a0)+,d1
  1247.     cmpi.b        #10,d1
  1248.     bne.s        .skip
  1249.     move.b        #0,-1(a0)
  1250.     move.l        a0,(a1)+
  1251. .skip    dbf        d0,.loop
  1252.     rts
  1253.  
  1254.  
  1255. * Put up a requester, a0 points to string, a1 to answer string
  1256. *                     a3 points to args
  1257. * Returns with d0=result
  1258. Req    cmpi.w        #36,Execvers
  1259.     blt.s        .kickskip
  1260.  
  1261.     move.l        a0,ReqBody
  1262.     move.l        a1,ReqGad
  1263.  
  1264.     move.l        WindowPtr,a0        screen
  1265.     lea        ReqStruct,a1        Request struct
  1266.     move.w        #0,a2            No shared IDCMP
  1267.     CALLINT        EasyRequestArgs
  1268. .kickskip
  1269.     rts
  1270.  
  1271. * Get the length of a string in pixels
  1272. * Input: a0 -> string
  1273. * Output: d0 -> PixelLength 
  1274. TextLength
  1275.     moveq        #0,d1
  1276.     move.l        a0,a1
  1277. .loop    addq.l        #1,d1
  1278.     move.b        (a0)+,d0
  1279.     cmpi.b        #0,d0
  1280.     bne.s        .loop
  1281.     subq.l        #1,d1
  1282.     
  1283.     move.l        d1,d0
  1284.     move.l        a1,a0
  1285.     move.l        FakeRast,a1
  1286.     CALLGRAF    TextLength
  1287.     rts    
  1288.  
  1289. * Find widest bit of text
  1290. WidestText
  1291.     moveq        #0,d5
  1292.     lea        SetTXT,a5
  1293.     moveq        #6,d4
  1294. .loop    move.l        (a5)+,a0
  1295.     bsr.s        TextLength
  1296.     cmp.l        d5,d0
  1297.     ble.s        .skip
  1298.     move.l        d0,d5
  1299. .skip    dbf        d4,.loop
  1300.     move.l        d5,Widest
  1301.     rts    
  1302.  
  1303. * Find widest letter
  1304. WidestLetter
  1305.     moveq        #0,d5
  1306.     lea        Letters,a5
  1307.     moveq        #15,d4
  1308. .loop    move.l        a5,a0        
  1309.  
  1310.     moveq        #1,d0
  1311.     move.l        FakeRast,a1
  1312.     CALLGRAF    TextLength
  1313.     addq.l        #1,a5
  1314.  
  1315.     cmp.l        d5,d0
  1316.     ble.s        .skip
  1317.     move.l        d0,d5
  1318. .skip    dbf        d4,.loop
  1319.     move.l        d5,WidLett
  1320.     rts    
  1321.  
  1322. * Find widest arrow
  1323. WidestArrow
  1324.     moveq        #0,d5
  1325.     lea        Arrows,a5
  1326.     moveq        #1,d4
  1327. .loop    move.l        a5,a0        
  1328.  
  1329.     moveq        #1,d0
  1330.     move.l        FakeRast,a1
  1331.     CALLGRAF    TextLength
  1332.     addq.l        #1,a5
  1333.  
  1334.     cmp.l        d5,d0
  1335.     ble.s        .skip
  1336.     move.l        d0,d5
  1337. .skip    dbf        d4,.loop
  1338.     move.l        d5,WidArrow
  1339.     rts    
  1340.  
  1341.  
  1342. * Set gadget borders
  1343. DoBorders
  1344.     lea        SmallBrdDat,a0
  1345.     lea        SmallBrdDat2,a1
  1346.     
  1347.     move.l        WidLett,d0
  1348.     addq.w        #6,d0            d0=2+width+inh
  1349.     
  1350.     move.w        d0,(a0)
  1351.     move.w        d0,12(a1)
  1352.     move.w        d0,16(a1)
  1353.     
  1354.     addq.w        #1,d0            d0=3+width+inh
  1355.     move.w        d0,4(a1)
  1356.     move.w        d0,8(a1)
  1357.     
  1358.     moveq        #0,d0    
  1359.     move.w        FontY,d0
  1360.     addq.w        #2,d0            d0=high
  1361.     
  1362.     move.w        d0,18(a0)
  1363.     move.w        d0,14(a1)
  1364.     
  1365.     addq.w        #1,d0            d0=high+1
  1366.     move.w        d0,10(a0)
  1367.     move.w        d0,2(a1)
  1368.     move.w        d0,6(a1)
  1369.  
  1370.     lea        MediumBrdDat,a0
  1371.     lea        MediumBrdDat2,a1
  1372.     
  1373.     move.l        WidArrow,d0
  1374.     addq.w        #6,d0            d0=2+width+inh
  1375.     
  1376.     move.w        d0,(a0)
  1377.     move.w        d0,12(a1)
  1378.     move.w        d0,16(a1)
  1379.     
  1380.     addq.w        #1,d0            d0=3+width+inh
  1381.     move.w        d0,4(a1)
  1382.     move.w        d0,8(a1)
  1383.     
  1384.     moveq        #0,d0    
  1385.     move.w        FontY,d0
  1386.     addq.w        #2,d0            d0=high
  1387.     
  1388.     move.w        d0,18(a0)
  1389.     move.w        d0,14(a1)
  1390.     
  1391.     addq.w        #1,d0            d0=high+1
  1392.     move.w        d0,10(a0)
  1393.     move.w        d0,2(a1)
  1394.     move.w        d0,6(a1)
  1395.  
  1396.  
  1397.     move.l        SetTXT,a0
  1398.     bsr        TextLength
  1399.     andi.l         #$0000FFFF,d0
  1400.     
  1401.     lea        SetBrdDat,a0
  1402.     lea        SetBrdDat2,a1
  1403.     
  1404.     addq.w        #6,d0            d0=2+width+inh
  1405.     
  1406.     move.w        d0,(a0)
  1407.     move.w        d0,12(a1)
  1408.     move.w        d0,16(a1)
  1409.     
  1410.     addq.w        #1,d0            d0=3+width+inh
  1411.     move.w        d0,4(a1)
  1412.     move.w        d0,8(a1)
  1413.     
  1414.     moveq        #0,d0    
  1415.     move.w        FontY,d0
  1416.     addq.w        #2,d0            d0=high
  1417.     
  1418.     move.w        d0,18(a0)
  1419.     move.w        d0,14(a1)
  1420.     
  1421.     addq.w        #1,d0            d0=high+1
  1422.     move.w        d0,10(a0)
  1423.     move.w        d0,2(a1)
  1424.     move.w        d0,6(a1)
  1425.  
  1426.     lea        BigBrdDat,a0
  1427.     lea        BigBrdDat2,a1
  1428.     
  1429.     move.l        Widest,d0
  1430.     addq.w        #6,d0            d0=2+width+inh
  1431.     
  1432.     move.w        d0,(a0)
  1433.     move.w        d0,12(a1)
  1434.     move.w        d0,16(a1)
  1435.     
  1436.     addq.w        #1,d0            d0=3+width+inh
  1437.     move.w        d0,4(a1)
  1438.     move.w        d0,8(a1)
  1439.     
  1440.     moveq        #0,d0    
  1441.     move.w        FontY,d0
  1442.     addq.w        #2,d0            d0=high
  1443.     
  1444.     move.w        d0,18(a0)
  1445.     move.w        d0,14(a1)
  1446.     
  1447.     addq.w        #1,d0            d0=high+1
  1448.     move.w        d0,10(a0)
  1449.     move.w        d0,2(a1)
  1450.     move.w        d0,6(a1)
  1451.  
  1452.     lea        DispBrdDat,a0
  1453.     lea        DispBrdDat2,a1
  1454.     
  1455.     move.l        Widest,d0
  1456.     add.w        #30,d0            d0=2+width+inh
  1457.     move.l        WidLett,d1
  1458.     mulu.w        #2,d1
  1459.     add.w        d1,d0
  1460.  
  1461.     move.w        d0,(a0)
  1462.     move.w        d0,12(a1)
  1463.     move.w        d0,16(a1)
  1464.     
  1465.     addq.w        #1,d0            d0=3+width+inh
  1466.     move.w        d0,4(a1)
  1467.     move.w        d0,8(a1)
  1468.     
  1469.     moveq        #0,d0    
  1470.     move.w        FontY,d0
  1471.     addq.w        #2,d0            d0=high
  1472.     
  1473.     move.w        d0,18(a0)
  1474.     move.w        d0,14(a1)
  1475.     
  1476.     addq.w        #1,d0            d0=high+1
  1477.     move.w        d0,10(a0)
  1478.     move.w        d0,2(a1)
  1479.     move.w        d0,6(a1)
  1480.  
  1481.     lea        MainBrdDat,a0
  1482.     lea        MainBrdDat2,a1
  1483.     
  1484.     move.l        WindowWidth,d0
  1485.     subq.w        #6,d0            d0=winwidth-something
  1486.  
  1487.     move.w        d0,(a0)
  1488.     move.w        d0,12(a1)
  1489.     move.w        d0,16(a1)
  1490.     
  1491.     addq.w        #1,d0            
  1492.     move.w        d0,4(a1)
  1493.     move.w        d0,8(a1)
  1494.     
  1495.     moveq        #0,d0    
  1496.     move.w        FontY,d0
  1497.     mulu.w        #8,d0
  1498.     addq.w        #4,d0            d0=high
  1499.     
  1500.     move.w        d0,18(a0)
  1501.     move.w        d0,14(a1)
  1502.     
  1503.     addq.w        #1,d0            d0=high+1
  1504.     move.w        d0,10(a0)
  1505.     move.w        d0,2(a1)
  1506.     move.w        d0,6(a1)
  1507.     rts    
  1508.  
  1509. * Set gadget widths and heights
  1510. DoWidths
  1511.     move.l        WidLett,d0
  1512.     addq.w        #8,d0
  1513.     moveq        #0,d1
  1514.     move.w        FontY,d1
  1515.     addq.w        #4,d1
  1516.  
  1517.     moveq        #15,d2
  1518.     lea        Gad01,a0
  1519. .loop    move.w        d0,gg_Width(a0)
  1520.     move.w        d1,gg_Height(a0)
  1521.     
  1522.     move.l        (a0),a0            gg_NextGadget
  1523.     dbf        d2,.loop
  1524.  
  1525. Arrows    move.l        WidArrow,d0
  1526.     addq.w        #8,d0
  1527.     moveq        #0,d1
  1528.     move.w        FontY,d1
  1529.     addq.w        #4,d1
  1530.  
  1531.     moveq        #3,d2
  1532.     lea        Gad17,a0
  1533. .loop    move.w        d0,gg_Width(a0)
  1534.     move.w        d1,gg_Height(a0)
  1535.     
  1536.     move.l        (a0),a0            gg_NextGadget
  1537.     dbf        d2,.loop
  1538.  
  1539. Sets    move.l        SetTXT,a0
  1540.     bsr        TextLength
  1541.     andi.l         #$0000FFFF,d0
  1542.     addq.w        #8,d0
  1543.     moveq        #0,d1
  1544.     move.w        FontY,d1
  1545.     addq.w        #4,d1
  1546.  
  1547.     moveq        #1,d2
  1548.     lea        Gad21,a0
  1549. .loop    move.w        d0,gg_Width(a0)
  1550.     move.w        d1,gg_Height(a0)
  1551.     
  1552.     move.l        (a0),a0            gg_NextGadget
  1553.     dbf        d2,.loop
  1554.  
  1555. Bigs    move.l        Widest,d0
  1556.     addq.w        #8,d0
  1557.     moveq        #0,d1
  1558.     move.w        FontY,d1
  1559.     addq.w        #4,d1
  1560.  
  1561.     moveq        #5,d2
  1562.     lea        Gad23,a0
  1563. .loop    move.w        d0,gg_Width(a0)
  1564.     move.w        d1,gg_Height(a0)
  1565.     
  1566.     move.l        (a0),a0            gg_NextGadget
  1567.     dbf        d2,.loop
  1568.     rts                    
  1569.  
  1570. * Set gadget positions
  1571. DoPositions
  1572.     moveq        #2,d0
  1573.     lea        Gad21,a0
  1574.     move.w        d0,gg_LeftEdge(a0)
  1575.     lea        Gad23,a0
  1576.     move.w        d0,gg_LeftEdge(a0)
  1577.     lea        Gad24,a0
  1578.     move.w        d0,gg_LeftEdge(a0)
  1579.     add.w        #14,d0
  1580.     add.l        Widest,d0        X1=breedstetekst+12
  1581.     lea        Gad13,a0
  1582.     move.w        d0,gg_LeftEdge(a0)
  1583.     lea        Gad09,a0
  1584.     move.w        d0,gg_LeftEdge(a0)
  1585.     lea        Gad05,a0
  1586.     move.w        d0,gg_LeftEdge(a0)
  1587.     lea        Gad01,a0
  1588.     move.w        d0,gg_LeftEdge(a0)
  1589.     add.w        #10,d0
  1590.     add.l        WidLett,d0        X2=x1+breedsteletter+10
  1591.     lea        Gad14,a0
  1592.     move.w        d0,gg_LeftEdge(a0)
  1593.     lea        Gad10,a0
  1594.     move.w        d0,gg_LeftEdge(a0)
  1595.     lea        Gad06,a0
  1596.     move.w        d0,gg_LeftEdge(a0)
  1597.     lea        Gad02,a0
  1598.     move.w        d0,gg_LeftEdge(a0)
  1599.     add.w        #10,d0
  1600.     add.l        WidLett,d0
  1601.     lea        Gad15,a0
  1602.     move.w        d0,gg_LeftEdge(a0)
  1603.     lea        Gad11,a0
  1604.     move.w        d0,gg_LeftEdge(a0)
  1605.     lea        Gad07,a0
  1606.     move.w        d0,gg_LeftEdge(a0)
  1607.     lea        Gad03,a0
  1608.     move.w        d0,gg_LeftEdge(a0)
  1609.     add.w        #10,d0
  1610.     add.l        WidLett,d0
  1611.     lea        Gad16,a0
  1612.     move.w        d0,gg_LeftEdge(a0)
  1613.     lea        Gad12,a0
  1614.     move.w        d0,gg_LeftEdge(a0)
  1615.     lea        Gad08,a0
  1616.     move.w        d0,gg_LeftEdge(a0)
  1617.     lea        Gad04,a0
  1618.     move.w        d0,gg_LeftEdge(a0)
  1619.     add.w        #14,d0
  1620.     add.l        WidLett,d0
  1621.     lea        Gad19,a0
  1622.     move.w        d0,gg_LeftEdge(a0)
  1623.     lea        Gad25,a0
  1624.     move.w        d0,gg_LeftEdge(a0)
  1625.     lea        Gad26,a0
  1626.     move.w        d0,gg_LeftEdge(a0)
  1627.     add.w        #14,d0
  1628.     add.l        Widest,d0
  1629.     lea        Gad27,a0
  1630.     move.w        d0,gg_LeftEdge(a0)
  1631.     lea        Gad28,a0
  1632.     move.w        d0,gg_LeftEdge(a0)
  1633.  
  1634.  
  1635.     moveq        #0,d0
  1636.     move.w        FontY,d0
  1637.     mulu.w        #8,d0    
  1638.     add.w        #10,d0
  1639.     lea        Gad27,a0
  1640.     move.w        d0,gg_TopEdge(a0)
  1641.     add.w        FontY,d0
  1642.     addq.w        #5,d0
  1643.     lea        Gad13,a0
  1644.     move.w        d0,gg_TopEdge(a0)
  1645.     lea        Gad14,a0
  1646.     move.w        d0,gg_TopEdge(a0)
  1647.     lea        Gad15,a0
  1648.     move.w        d0,gg_TopEdge(a0)
  1649.     lea        Gad16,a0
  1650.     move.w        d0,gg_TopEdge(a0)
  1651.     lea        Gad21,a0
  1652.     move.w        d0,gg_TopEdge(a0)
  1653.     lea        Gad22,a0
  1654.     move.w        d0,gg_TopEdge(a0)
  1655.     add.w        FontY,d0
  1656.     addq.w        #5,d0
  1657.     lea        Gad09,a0
  1658.     move.w        d0,gg_TopEdge(a0)
  1659.     lea        Gad10,a0
  1660.     move.w        d0,gg_TopEdge(a0)
  1661.     lea        Gad11,a0
  1662.     move.w        d0,gg_TopEdge(a0)
  1663.     lea        Gad12,a0
  1664.     move.w        d0,gg_TopEdge(a0)
  1665.     lea        Gad17,a0
  1666.     move.w        d0,gg_TopEdge(a0)
  1667.     lea        Gad18,a0
  1668.     move.w        d0,gg_TopEdge(a0)
  1669.     lea        Gad19,a0
  1670.     move.w        d0,gg_TopEdge(a0)
  1671.     lea        Gad20,a0
  1672.     move.w        d0,gg_TopEdge(a0)
  1673.     add.w        FontY,d0
  1674.     addq.w        #5,d0
  1675.     lea        Gad05,a0
  1676.     move.w        d0,gg_TopEdge(a0)
  1677.     lea        Gad06,a0
  1678.     move.w        d0,gg_TopEdge(a0)
  1679.     lea        Gad07,a0
  1680.     move.w        d0,gg_TopEdge(a0)
  1681.     lea        Gad08,a0
  1682.     move.w        d0,gg_TopEdge(a0)
  1683.     lea        Gad23,a0
  1684.     move.w        d0,gg_TopEdge(a0)
  1685.     lea        Gad25,a0
  1686.     move.w        d0,gg_TopEdge(a0)
  1687.     add.w        FontY,d0
  1688.     addq.w        #5,d0
  1689.     lea        Gad01,a0
  1690.     move.w        d0,gg_TopEdge(a0)
  1691.     lea        Gad02,a0
  1692.     move.w        d0,gg_TopEdge(a0)
  1693.     lea        Gad03,a0
  1694.     move.w        d0,gg_TopEdge(a0)
  1695.     lea        Gad04,a0
  1696.     move.w        d0,gg_TopEdge(a0)
  1697.     lea        Gad24,a0
  1698.     move.w        d0,gg_TopEdge(a0)
  1699.     lea        Gad26,a0
  1700.     move.w        d0,gg_TopEdge(a0)
  1701.     lea        Gad28,a0
  1702.     move.w        d0,gg_TopEdge(a0)
  1703.  
  1704.     lea        Gad19,a0
  1705.     move.w        gg_LeftEdge(a0),d1
  1706.     move.w        gg_Width(a0),d0
  1707.     add.w        d1,d0
  1708.     addq.w        #2,d0
  1709.     lea        Gad20,a0
  1710.     move.w        d0,gg_LeftEdge(a0)
  1711.  
  1712.     lea        Gad09,a0
  1713.     move.w        gg_LeftEdge(a0),d0
  1714.     lea        Gad18,a0
  1715.     move.w        gg_Width(a0),d1
  1716.     sub.w        d1,d0
  1717.     subq.w        #6,d0
  1718.     move.w        d0,gg_LeftEdge(a0)
  1719.     lea        Gad17,a0
  1720.     sub.w        d1,d0
  1721.     subq.w        #2,d0
  1722.     move.w        d0,gg_LeftEdge(a0)
  1723.  
  1724.     lea        Gad27,a0
  1725.     move.w        gg_LeftEdge(a0),d0
  1726.     lea        Gad22,a0
  1727.     move.w        gg_Width(a0),d1
  1728.     sub.w        d1,d0
  1729.     subq.w        #6,d0
  1730.     move.w        d0,gg_LeftEdge(a0)
  1731.  
  1732.     lea        WinGads,a0
  1733.  
  1734. .loop    move.w        gg_TopEdge(a0),d0
  1735.     add.w        TopBorder,d0
  1736.     move.w        d0,gg_TopEdge(a0)
  1737.     move.w        gg_LeftEdge(a0),d0
  1738.     add.w        LeftBorder,d0
  1739.     move.w        d0,gg_LeftEdge(a0)
  1740.  
  1741.     move.l        (a0),d0
  1742.     cmpi.l        #0,d0
  1743.     beq.s        .done
  1744.     move.l        (a0),a0                gg_NextGadget
  1745.     bra.s        .loop
  1746.         
  1747. .done    rts
  1748.  
  1749. * Center gadget text
  1750. CenterText
  1751.     lea        WinGads,a0
  1752.  
  1753. .loop    move.l        a0,a5
  1754.     move.l        gg_GadgetText(a0),a1
  1755.  
  1756.     cmpi.b        #1,tt_Topaz
  1757.     bne.s        .skip
  1758.     lea        Topaz,a6
  1759.     move.l        a6,it_ITextFont(a1)
  1760.  
  1761. .skip    move.l        it_IText(a1),a0
  1762.     bsr        TextLength
  1763.     andi.l         #$0000FFFF,d0
  1764.     divu.w        #2,d0
  1765.     move.l        d0,d3                d3=halve breedte
  1766.     
  1767.     move.w        FontY,d0
  1768.     andi.l         #$0000FFFF,d0
  1769.     divu.w        #2,d0
  1770.     move.l        d0,d4                d4=halve hoogte    
  1771.     
  1772.     move.l        a5,a0
  1773.     moveq        #0,d0
  1774.     moveq        #0,d1
  1775.     move.w        gg_Width(a0),d0
  1776.     move.w        gg_Height(a0),d1
  1777.     divu.w        #2,d0
  1778.     divu.w        #2,d1
  1779.  
  1780.     sub.w        d3,d0
  1781.     sub.w        d4,d1
  1782.  
  1783.     move.l        gg_GadgetText(a0),a1
  1784.     move.w        d0,it_LeftEdge(a1)
  1785.     move.w        d1,it_TopEdge(a1)    
  1786.         
  1787.     move.l        (a0),d0
  1788.     cmpi.l        #0,d0
  1789.     beq.s        .done
  1790.     move.l        (a0),a0                gg_NextGadget
  1791.     bra.s        .loop
  1792.         
  1793. .done    rts
  1794.  
  1795. * Set text of gadgets
  1796. InsertText
  1797.     lea        Gad21Txt,a0
  1798.     move.l        SetTXT,it_IText(a0)
  1799.  
  1800.     lea        Gad23Txt,a0
  1801.     move.l        GuruTXT,it_IText(a0)
  1802.     lea        Gad24Txt,a0
  1803.     move.l        LastTXT,it_IText(a0)
  1804.     lea        Gad25Txt,a0
  1805.     move.l        DosTXT,it_IText(a0)
  1806.     lea        Gad26Txt,a0
  1807.     move.l        DefaultTXT,it_IText(a0)
  1808.     lea        Gad27Txt,a0
  1809.     move.l        QuitTXT,it_IText(a0)
  1810.     lea        Gad28Txt,a0
  1811.     move.l        InfoTXT,it_IText(a0)
  1812.     rts
  1813.  
  1814. * Refresh window on a resize
  1815. Refresh
  1816.     move.l        WindowPtr,a0        Window sized bigger ?
  1817.     move.w        wd_Width(a0),d0
  1818.     andi.l         #$0000FFFF,d0
  1819.     cmp.l        WindowWidth,d0
  1820.     blt        Message
  1821.     bsr.s        SubRefresh
  1822.     bra        Message
  1823.  
  1824. SubRefresh
  1825.     moveq        #0,d0
  1826.     move.b        DarkPen,d0
  1827.     move.l        WindowRastPort,a1
  1828.     CALLGRAF    SetAPen
  1829.     lea        Gad27,a5
  1830.     move.w        gg_LeftEdge(a5),d0
  1831.     move.w        gg_TopEdge(a5),d1
  1832.     subq.w        #4,d0
  1833.     move.l        WindowRastPort,a1
  1834.     CALLGRAF    Move
  1835.     lea        Gad28,a5
  1836.     move.w        gg_LeftEdge(a5),d0
  1837.     move.w        gg_TopEdge(a5),d1
  1838.     subq.w        #4,d0
  1839.     move.w        gg_Height(a5),d2
  1840.     add.w        d2,d1
  1841.     subq.w        #1,d1
  1842.     move.l        WindowRastPort,a1
  1843.     CALLGRAF    Draw
  1844.  
  1845.     moveq        #0,d0
  1846.     move.b        ShinePen,d0
  1847.     move.l        WindowRastPort,a1
  1848.     CALLGRAF    SetAPen
  1849.     lea        Gad27,a5
  1850.     move.w        gg_LeftEdge(a5),d0
  1851.     move.w        gg_TopEdge(a5),d1
  1852.     subq.w        #3,d0
  1853.     move.l        WindowRastPort,a1
  1854.     CALLGRAF    Move
  1855.     lea        Gad28,a5
  1856.     move.w        gg_LeftEdge(a5),d0
  1857.     move.w        gg_TopEdge(a5),d1
  1858.     subq.w        #3,d0
  1859.     move.w        gg_Height(a5),d2
  1860.     add.w        d2,d1
  1861.     subq.w        #1,d1
  1862.     move.l        WindowRastPort,a1
  1863.     CALLGRAF    Draw
  1864.  
  1865.     move.l        Indicator1X,d0
  1866.     move.l        Indicator1Y,d1
  1867.     move.l        WindowRastPort,a0
  1868.     lea        DispBorder,a1
  1869.     CALLINT        DrawBorder
  1870.     
  1871.     move.l        Indicator2X,d0
  1872.     move.l        Indicator2Y,d1
  1873.     move.l        WindowRastPort,a0
  1874.     lea        DispBorder,a1
  1875.     CALLINT        DrawBorder
  1876.  
  1877.     moveq        #2,d0
  1878.     moveq        #2,d1
  1879.     add.w        LeftBorder,d0
  1880.     add.w        TopBorder,d1
  1881.     move.l        WindowRastPort,a0
  1882.     lea        MainBorder,a1
  1883.     CALLINT        DrawBorder
  1884.  
  1885.     bsr        UpdGuru
  1886.     bsr        UpdDos
  1887.     bsr        RefMain
  1888.     rts        
  1889.  
  1890. * InitIndCoords
  1891. InitIndCoords
  1892.     lea        Gad27,a5
  1893.     move.w        gg_TopEdge(a5),d1
  1894.     andi.l         #$0000FFFF,d1
  1895.     moveq        #2,d0
  1896.     add.w        LeftBorder,d0
  1897.     move.l        d0,Indicator1X
  1898.     move.l        d1,Indicator1Y
  1899.  
  1900.     lea        Gad27,a5
  1901.     move.w        gg_TopEdge(a5),d1
  1902.     andi.l         #$0000FFFF,d1
  1903.     lea        Gad15,a5
  1904.     move.w        gg_LeftEdge(a5),d0
  1905.     andi.l         #$0000FFFF,d0
  1906.     move.l        d0,Indicator2X
  1907.     move.l        d1,Indicator2Y
  1908.     rts
  1909.  
  1910. * Initialize slider
  1911. InitPropGad
  1912.     lea        Gad29,a0
  1913.  
  1914.     move.w        FontY,d0
  1915.     mulu.w        #8,d0
  1916.     addq.w        #4,d0
  1917.     move.w        d0,gg_Height(a0)
  1918.     
  1919.     lea        Gad27,a1
  1920.     move.w        gg_LeftEdge(a1),d0
  1921.     move.w        gg_Width(a1),d1
  1922.     add.w        d1,d0
  1923.     sub.w        #12,d0
  1924.     move.w        d0,gg_LeftEdge(a0)
  1925.  
  1926.     moveq        #3,d0
  1927.     add.w        TopBorder,d0
  1928.     move.w        d0,gg_TopEdge(a0)
  1929.     rts
  1930.          
  1931. * Clear Temporary screen
  1932. ClrScr    moveq        #0,d0
  1933.     move.l        FakeRast,a1
  1934.     CALLGRAF    SetRast
  1935.     rts
  1936.  
  1937. * Reset Display in Guru window
  1938. * = slider to zero, copy contents of temp to display.
  1939. ResScr    lea        Gad29,a0
  1940.     move.l        WindowPtr,a1
  1941.     lea        0.w,a2
  1942.     move.w        #AUTOKNOB!FREEVERT!PROPNEWLOOK,d0
  1943.     moveq        #0,d1
  1944.     moveq        #0,d2
  1945.     move.w        #-1,d3
  1946.     move.w        #16384,d4
  1947.     moveq        #1,d5
  1948.     CALLINT        NewModifyProp
  1949.     bsr        RefMain
  1950.     rts
  1951.  
  1952. ScrollUp
  1953.     lea        PropInfo29,a0
  1954.     moveq        #0,d1
  1955.     move.w        pi_VertPot(a0),d1        SY
  1956.     cmpi.l        #3000,d1
  1957.     blt.s        .skip
  1958.     sub.w        #3000,d1
  1959.     move.l        d1,d2
  1960.     bra.s        .upd
  1961. .skip    moveq        #0,d2
  1962. .upd    lea        Gad29,a0
  1963.     move.l        WindowPtr,a1
  1964.     lea        0.w,a2
  1965.     move.w        #AUTOKNOB!FREEVERT!PROPNEWLOOK,d0
  1966.     moveq        #0,d1
  1967.     move.w        #-1,d3
  1968.     move.w        #16384,d4
  1969.     moveq        #1,d5
  1970.     CALLINT        NewModifyProp
  1971.     bsr.s        RefMain
  1972.     rts
  1973.  
  1974. ScrollDown
  1975.     lea        PropInfo29,a0
  1976.     moveq        #0,d1
  1977.     move.w        pi_VertPot(a0),d1        SY
  1978.     cmpi.l        #62535,d1
  1979.     bgt.s        .skip
  1980.     add.w        #3000,d1
  1981.     move.l        d1,d2
  1982.     bra.s        .upd
  1983. .skip    move.w        #$FFFF,d2
  1984. .upd    lea        Gad29,a0
  1985.     move.l        WindowPtr,a1
  1986.     lea        0.w,a2
  1987.     move.w        #AUTOKNOB!FREEVERT!PROPNEWLOOK,d0
  1988.     moveq        #0,d1
  1989.     move.w        #-1,d3
  1990.     move.w        #16384,d4
  1991.     moveq        #1,d5
  1992.     CALLINT        NewModifyProp
  1993.     bsr.s        RefMain
  1994.     rts
  1995.  
  1996. * Copy contents of temp. image to main display
  1997. RefMain    move.l        #65536,d0
  1998.     move.w        FontY,d1
  1999.     andi.l         #$0000FFFF,d1
  2000.     mulu.w        #24,d1
  2001.     divu.w        d1,d0                D0=offspp
  2002.     moveq        #0,d7
  2003.     move.w        d0,d7                D7=offspp
  2004.     
  2005.     moveq        #0,d0                SX
  2006.     moveq        #0,d0
  2007.     lea        PropInfo29,a0
  2008.     moveq        #0,d1
  2009.     move.w        pi_VertPot(a0),d1        SY
  2010.     divu.w        d7,d1
  2011.     swap         d0
  2012.     move.w        #0,d0
  2013.     swap        d0
  2014.         
  2015.     moveq        #5,d2
  2016.     add.w        LeftBorder,d2            DX
  2017.     moveq        #5,d3
  2018.     add.w        TopBorder,d3            DY
  2019.  
  2020.     move.l        DisplayWidth,d4            SiX
  2021.  
  2022.     move.w        FontY,d5
  2023.     mulu.w        #8,d5
  2024.     andi.l         #$0000FFFF,d5            SiY
  2025.     
  2026.     lea        FakeBitmap,a0
  2027.     move.l        WindowRastPort,a1
  2028.     
  2029.     moveq        #0,d0
  2030.     move.b        #$C0,d6
  2031.     CALLGRAF    BltBitMapRastPort
  2032.     rts        
  2033.     
  2034. * DrawLogo
  2035. DrawLogo
  2036.     bsr        ClrScr
  2037.     move.l        FakeRast,a0
  2038.     lea        GuruLogoImg,a1
  2039.  
  2040.     move.l        DisplayWidth,d0
  2041.     divu.w        #2,d0
  2042.     sub.w        #103,d0
  2043.     cmpi.w        #0,d0
  2044.     blt.s        .done    
  2045.     andi.l        #$0000FFFF,d0    
  2046.  
  2047.     moveq        #0,d1
  2048.     move.w        FontY,d1    
  2049.     mulu.w        #4,d1
  2050.     sub.w        #25,d1
  2051.     cmpi.w        #0,d1
  2052.     blt.s        .done    
  2053.     andi.l        #$0000FFFF,d1    
  2054.  
  2055.     CALLINT        DrawImage
  2056.  
  2057. .done    bsr        ResScr
  2058.     rts
  2059.  
  2060. * Slider movements update
  2061. Slider    move.w        gg_GadgetID(a2),d2        Which gadget
  2062.     cmpi.w        #29,d2
  2063.     bne        Message                Not da slider
  2064.  
  2065. .loop    CALLGRAF    WaitTOF
  2066.     bsr        RefMain    
  2067.  
  2068. .msg    move.l        WindowUserPort,a0
  2069.     CALLEXEC    GetMsg
  2070.     tst.l        d0
  2071.     beq.s        .loop
  2072.     
  2073.     move.l        d0,a1
  2074.     move.l        im_Class(a1),d2        ; Soort msg
  2075.     move.l        im_IAddress(a1),a2    ; naar gadget
  2076.     CALLEXEC    ReplyMsg
  2077.     
  2078.     cmpi.l        #IDCMP_GADGETUP,d2
  2079.     beq.s        .Released
  2080.     
  2081.     bra.s        .msg
  2082.  
  2083. .Released
  2084.     bra        Message
  2085.  
  2086. * Update Guru display
  2087. UpdGuru    moveq        #0,d0
  2088.     move.l        WindowRastPort,a1
  2089.     CALLGRAF    SetAPen
  2090.     
  2091.     move.l        Indicator1X,d0
  2092.     move.l        Indicator1Y,d1
  2093.     addq.l        #2,d0
  2094.     addq.l        #1,d1
  2095.  
  2096.     lea        DispBrdDat,a0
  2097.     move.w        (a0),d2    
  2098.     andi.l        #$0000FFFF,d2
  2099.     subq.l        #3,d2
  2100.     add.l        d0,d2
  2101.  
  2102.     move.l        d0,d6
  2103.     move.l        d2,d7
  2104.  
  2105.     move.l        d1,d3
  2106.     add.w        FontY,d3
  2107.     addq.l        #1,d3
  2108.     move.l        WindowRastPort,a1
  2109.     CALLGRAF    RectFill
  2110.     
  2111.     lea        GuruString,a0
  2112.     bsr        TextLength
  2113.     
  2114.     sub.l        d6,d7
  2115.     divu.w        #2,d7
  2116.     divu.w        #2,d0
  2117.     andi.l        #$0000FFFF,d0
  2118.     andi.l        #$0000FFFF,d7
  2119.     sub.l        d0,d7
  2120.     
  2121.     move.l        d7,d0
  2122.     add.l        Indicator1X,d0
  2123.     addq.l        #2,d0
  2124.     move.l        Indicator1Y,d1
  2125.     addq.l        #2,d1
  2126.     add.w        FontBase,d1
  2127.  
  2128.     move.l        WindowRastPort,a1
  2129.     CALLGRAF    Move
  2130.  
  2131.     moveq        #0,d0
  2132.     move.b        DarkPen,d0
  2133.     move.l        WindowRastPort,a1
  2134.     CALLGRAF    SetAPen
  2135.     
  2136.     moveq        #7,d7
  2137.     moveq        #0,d6
  2138.     lea        GuruString,a5
  2139. .loop    addq.w        #1,d6
  2140.     move.b        GuruOffset,d5
  2141.     cmp.b        d6,d5
  2142.     beq.s        .skip
  2143.     bra.s        .skip2    
  2144.  
  2145. .skip    moveq        #0,d0
  2146.     move.b        ShinePen,d0
  2147.     move.l        WindowRastPort,a1
  2148.     CALLGRAF    SetAPen
  2149.     bra.s        .skip3    
  2150.  
  2151. .skip2    moveq        #0,d0
  2152.     move.b        DarkPen,d0
  2153.     move.l        WindowRastPort,a1
  2154.     CALLGRAF    SetAPen
  2155.  
  2156. .skip3    move.l        WindowRastPort,a1
  2157.     move.l        a5,a0
  2158.     moveq        #1,d0
  2159.     CALLGRAF    Text
  2160.  
  2161.     addq.l        #1,a5    
  2162.     dbf        d7,.loop
  2163.     rts
  2164.  
  2165. * Update Dos display
  2166. UpdDos    moveq        #0,d0
  2167.     move.l        WindowRastPort,a1
  2168.     CALLGRAF    SetAPen
  2169.     
  2170.     move.l        Indicator2X,d0
  2171.     move.l        Indicator2Y,d1
  2172.     addq.l        #2,d0
  2173.     addq.l        #1,d1
  2174.  
  2175.     lea        DispBrdDat,a0
  2176.     move.w        (a0),d2    
  2177.     andi.l        #$0000FFFF,d2
  2178.     subq.l        #3,d2
  2179.     add.l        d0,d2
  2180.  
  2181.     move.l        d0,d6
  2182.     move.l        d2,d7
  2183.  
  2184.     move.l        d1,d3
  2185.     add.w        FontY,d3
  2186.     addq.l        #1,d3
  2187.     move.l        WindowRastPort,a1
  2188.     CALLGRAF    RectFill
  2189.     
  2190.     lea        DosString,a0
  2191.     bsr        TextLength
  2192.     
  2193.     sub.l        d6,d7
  2194.     divu.w        #2,d7
  2195.     divu.w        #2,d0
  2196.     andi.l        #$0000FFFF,d0
  2197.     andi.l        #$0000FFFF,d7
  2198.     sub.l        d0,d7
  2199.     
  2200.     move.l        d7,d0
  2201.     add.l        Indicator2X,d0
  2202.     addq.l        #2,d0
  2203.     move.l        Indicator2Y,d1
  2204.     addq.l        #2,d1
  2205.     add.w        FontBase,d1
  2206.  
  2207.     move.l        WindowRastPort,a1
  2208.     CALLGRAF    Move
  2209.  
  2210.     moveq        #0,d0
  2211.     move.b        DarkPen,d0
  2212.     move.l        WindowRastPort,a1
  2213.     CALLGRAF    SetAPen
  2214.     
  2215.     moveq        #2,d7
  2216.     moveq        #0,d6
  2217.     lea        DosString,a5
  2218. .loop    addq.w        #1,d6
  2219.     move.b        DosOffset,d5
  2220.     cmp.b        d6,d5
  2221.     beq.s        .skip
  2222.     bra.s        .skip2    
  2223.  
  2224. .skip    moveq        #0,d0
  2225.     move.b        ShinePen,d0
  2226.     move.l        WindowRastPort,a1
  2227.     CALLGRAF    SetAPen
  2228.     bra.s        .skip3    
  2229.  
  2230. .skip2    moveq        #0,d0
  2231.     move.b        DarkPen,d0
  2232.     move.l        WindowRastPort,a1
  2233.     CALLGRAF    SetAPen
  2234.  
  2235. .skip3    move.l        WindowRastPort,a1
  2236.     move.l        a5,a0
  2237.     moveq        #1,d0
  2238.     CALLGRAF    Text
  2239.  
  2240.     addq.l        #1,a5    
  2241.     dbf        d7,.loop
  2242.     rts
  2243.  
  2244. * Search for a given text string
  2245. * Note: THIS IS CASE SENSITIVE
  2246. * Inputs: a0 -> string, ends with $0
  2247. *      a1 -> startaddress
  2248. *      a2 -> end address
  2249. * Output: a0 -> address of BEGIN of string
  2250. *      a1 -> address at END of string
  2251. *      if not found, a0 = 0
  2252. Search    movem.l        d0-d3/a2-a4,-(SP)
  2253.     moveq        #0,d0
  2254.     move.l        a0,a4
  2255. .loop    move.b        (a4)+,d1
  2256.     addq.l        #1,d0
  2257.     cmpi.b        #0,d1
  2258.     bne.s        .loop
  2259.     subq.l        #2,d0        d0 contains string length-1
  2260.     
  2261. .loop2    move.l        d0,d1        Init match loop
  2262.     move.l        a0,a3
  2263.     move.l        a1,a4
  2264.     
  2265. .loop3    move.b        (a3)+,d2
  2266.     move.b        (a4)+,d3
  2267.     cmp.b        d2,d3
  2268.     bne.s        .nomatch
  2269.     dbf        d1,.loop3
  2270.     bra.s        .found
  2271.     
  2272. .nomatch
  2273.     addq.l        #1,a1        Search from next char
  2274.     
  2275.     move.l        a2,d2
  2276.     move.l        a1,d3
  2277.     cmp.l        d2,d3
  2278.     beq.s        .notfound
  2279.     bra.s        .loop2
  2280.  
  2281. .found    move.l        a1,a0
  2282.     move.l        a4,a1
  2283.     movem.l        (SP)+,d0-d3/a2-a4
  2284.     rts
  2285.     
  2286. .notfound
  2287.     lea        0.w,a0
  2288.     lea        0.w,a1
  2289.     movem.l        (SP)+,d0-d3/a2-a4
  2290.     rts
  2291.     
  2292. * Filter all bit 31's from data file guru nums
  2293. * Alter texts to s'th' printable
  2294. FilterFile
  2295.     move.l        GeneralAlert,a1        
  2296.     move.l        DosAlert,a2
  2297.  
  2298. .loop    lea        Node,a0
  2299.     bsr.s        Search
  2300.     move.l        a0,d0
  2301.     cmpi.l        #0,d0
  2302.     beq.s        .done
  2303.  
  2304.     move.b        (a1),d0
  2305.     cmpi.b        #'@',d0
  2306.     blt.s        .nohex
  2307.     subi.b        #7,d0
  2308. .nohex    subi.b        #'0',d0
  2309.     move.b        d0,d1
  2310.     and.b        #$7,d1
  2311.     add.b        #'0',d1
  2312.     move.b        d1,(a1)
  2313.     
  2314.     bra.s        .loop
  2315.     
  2316. .done    move.l        DataBuff,a0
  2317.     move.l        DataSize,d0
  2318.     subq.l        #1,d0        
  2319. .loop2    move.b        (a0),d1
  2320.     cmpi.b        #10,d1            Erase all lf's
  2321.     beq.s        .wis1
  2322.     addq.l        #1,a0
  2323.     dbf        d0,.loop2
  2324.     bra.s        .done2
  2325. .wis1    move.b        #1,(a0)+        Code must not print chr$(1) !!
  2326.     dbf        d0,.loop2            
  2327.  
  2328. .done2    move.l        DataBuff,a0
  2329.     move.l        DataSize,d0
  2330.     subq.l        #1,d0        
  2331. .loop3    move.b        (a0),d1
  2332.     move.b        1(a0),d2
  2333.     cmpi.b        #'\',d1            Erase all newlines & replace them
  2334.     beq.s        .wis2
  2335.     addq.l        #1,a0
  2336.     dbf        d0,.loop3
  2337.     bra.s        .done3
  2338.  
  2339. .wis2    cmpi.b        #'n',d2
  2340.     beq.s        .wis3
  2341.     addq.l        #1,a0
  2342.     dbf        d0,.loop3
  2343.     bra.s        .done3
  2344.     
  2345. .wis3    move.b        #1,(a0)+
  2346.     move.b        #10,(a0)
  2347.     dbf        d0,.loop3
  2348.  
  2349. .done3    rts
  2350.  
  2351.  
  2352. * Modify gadget structures according to colormap
  2353. * -> correct 3d look on ALL systems (?)
  2354. GadCol    cmpi.b        #1,ScreenDepth
  2355.     beq        .scheme2
  2356.  
  2357.     move.l        ScreenColorMap,a0    Get RGB values of pen 1 & 2
  2358.     moveq        #1,d0
  2359.     CALLGRAF    GetRGB4
  2360.     moveq        #0,d1
  2361.     move.w        d0,d1
  2362.  
  2363.     divu        #256,d1
  2364.     move.w        d1,d4
  2365.     move.w        #0,d1
  2366.     swap         d1
  2367.  
  2368.     divu        #16,d1
  2369.     move.w        d1,d5
  2370.     move.w        #0,d1
  2371.     swap         d1
  2372.     move.w        d1,d6
  2373.     
  2374.     moveq        #0,d0
  2375.     add.w        d4,d0
  2376.     add.w        d5,d0
  2377.     add.w        d6,d0
  2378.     divu        #3,d0
  2379.     move.w        d0,d2
  2380.     
  2381.     move.l        ScreenColorMap,a0
  2382.     moveq        #2,d0
  2383.     CALLGRAF    GetRGB4
  2384.     moveq        #0,d1
  2385.     move.w        d0,d1
  2386.  
  2387.     divu        #256,d1
  2388.     move.w        d1,d4
  2389.     move.w        #0,d1
  2390.     swap         d1
  2391.  
  2392.     divu        #16,d1
  2393.     move.w        d1,d5
  2394.     move.w        #0,d1
  2395.     swap         d1
  2396.     move.w        d1,d6
  2397.     
  2398.     moveq        #0,d0
  2399.     add.w        d4,d0
  2400.     add.w        d5,d0
  2401.     add.w        d6,d0
  2402.     divu        #3,d0
  2403.     move.w        d0,d3
  2404.     
  2405.     cmp.b        d2,d3
  2406.     bgt.s        .scheme1
  2407.     
  2408.     moveq        #1,d2
  2409.     moveq        #2,d3
  2410.     bra.s        .domod
  2411.     
  2412. .scheme1 moveq        #2,d2
  2413.     moveq        #1,d3
  2414.     bra.s        .domod
  2415.     
  2416. .scheme2 moveq        #1,d2
  2417.     moveq        #1,d3
  2418.     
  2419. .domod    move.b        d2,ShinePen
  2420.     move.b        d3,DarkPen
  2421.  
  2422.     lea        WinGads,a0        Modify structures
  2423. .loop    move.l        gg_GadgetRender(a0),a1
  2424.     move.b        d2,bd_FrontPen(a1)
  2425.     move.l        bd_NextBorder(a1),a1
  2426.     move.b        d3,bd_FrontPen(a1)
  2427.  
  2428.     move.l        gg_SelectRender(a0),a1
  2429.     move.b        d3,bd_FrontPen(a1)
  2430.     move.l        bd_NextBorder(a1),a1
  2431.     move.b        d2,bd_FrontPen(a1)
  2432.     
  2433.     move.l        (a0),d0
  2434.     cmpi.l        #0,d0
  2435.     beq.s        .done1
  2436.     move.l        (a0),a0
  2437.     bra.s        .loop
  2438.         
  2439. .done1    lea        DispBorder,a1
  2440.     move.b        d3,bd_FrontPen(a1)
  2441.     move.l        bd_NextBorder(a1),a1
  2442.     move.b        d2,bd_FrontPen(a1)
  2443.  
  2444.     lea        MainBorder,a1
  2445.     move.b        d3,bd_FrontPen(a1)
  2446.     move.l        bd_NextBorder(a1),a1
  2447.     move.b        d2,bd_FrontPen(a1)
  2448.  
  2449.     cmp.b        #1,ScreenDepth
  2450.     bne.s        .done2
  2451.  
  2452.     lea        WinGads,a0        
  2453. .loop2    move.w        #GFLG_GADGHCOMP,gg_Flags(a0)
  2454.  
  2455.     move.l        (a0),d0
  2456.     cmpi.l        #0,d0
  2457.     beq.s        .done2
  2458.     move.l        (a0),a0
  2459.     bra.s        .loop2
  2460.         
  2461. .done2    rts    
  2462.  
  2463. ** EMERGENCY, window too big, force topaz
  2464. FontTooBig
  2465.     cmpi.w        #36,Execvers
  2466.     blt.s        .kickskip
  2467.  
  2468.     lea        0.w,a0
  2469.     move.l        ScreenLock,a1
  2470.     CALLINT        UnlockPubScreen
  2471. .kickskip
  2472.     move.l        Font,a1
  2473.     CALLGRAF    CloseFont
  2474.     move.b        #1,tt_Topaz
  2475.     bra        CliStart
  2476.  
  2477.  
  2478.     include        /subs/loadfileallmem.s
  2479.  
  2480.     SECTION DataZone,Data
  2481.  
  2482. taggie        dc.l    WA_Left,100
  2483.         dc.l    WA_Top,50
  2484.         dc.l    WA_InnerWidth,344
  2485.         dc.l    WA_InnerHeight,176
  2486.         dc.l    TAG_DONE
  2487.  
  2488. ReqStruct    dc.l    EasyStruct_SIZEOF
  2489.         dc.l    0
  2490.         dc.l    ReqTitle
  2491. ReqBody        dc.l    0
  2492. ReqGad        dc.l    0
  2493.  
  2494. WinTags        dc.l    WA_Left,0
  2495.         dc.l    WA_Top,0
  2496.         dc.l    WA_InnerWidth,0
  2497.         dc.l    WA_InnerHeight,0
  2498.         dc.l    WA_Title,WinTitle
  2499.         dc.l    WA_ScreenTitle,ScrTitle
  2500.         dc.l    WA_IDCMP,IDCMP_GADGETUP!IDCMP_GADGETDOWN!IDCMP_CLOSEWINDOW!IDCMP_ACTIVEWINDOW!IDCMP_NEWSIZE!IDCMP_VANILLAKEY!IDCMP_RAWKEY
  2501.         dc.l    WA_AutoAdjust,-1
  2502.         dc.l    WA_CloseGadget,-1
  2503.         dc.l    WA_DragBar,-1
  2504.         dc.l    WA_Activate,-1
  2505.         dc.l    WA_SmartRefresh,-1
  2506.         dc.l    WA_DepthGadget,-1
  2507.         dc.l    WA_Zoom,ZoomSize
  2508.         dc.l    WA_RMBTrap,-1
  2509.         dc.l    WA_NoCareRefresh,-1
  2510.         dc.l    WA_PubScreen
  2511. WinScreen    dc.l    0
  2512.         dc.l    TAG_DONE
  2513.  
  2514. Window1.3    dc.w    0,0
  2515.         dc.w    0,0
  2516.         dc.b    0,1
  2517.         dc.l    IDCMP_GADGETUP!IDCMP_CLOSEWINDOW!IDCMP_ACTIVEWINDOW!IDCMP_GADGETDOWN!IDCMP_VANILLAKEY
  2518.         dc.l    WFLG_CLOSEGADGET!WFLG_DRAGBAR!WFLG_DEPTHGADGET!WFLG_RMBTRAP!WFLG_NOCAREREFRESH
  2519.         dc.l    0
  2520.         dc.l    0
  2521.         dc.l    WinTitle
  2522.         dc.l    0
  2523.         dc.l    0
  2524.         dc.w    0,0,0,0
  2525.         dc.w    WBENCHSCREEN
  2526.  
  2527. IDTXT        dc.l    0
  2528. ByTXT        dc.l    0
  2529. Dummy1        dc.l    0
  2530. SetTXT        dc.l    SetTXTDat
  2531. GuruTXT        dc.l    GuruTXTDat
  2532. LastTXT        dc.l    LastTXTDat
  2533. DefaultTXT    dc.l    DefaultTXTDat
  2534. DosTXT        dc.l    DosTXTDat
  2535. InfoTXT        dc.l    InfoTXTDat
  2536. QuitTXT        dc.l    QuitTXTDat
  2537. Dummy2        dc.l    0
  2538. ErrDTXT        dc.l    ErrDTXTDat
  2539. ErrDRTXT    dc.l    ErrDRTXTDat
  2540. ErrInDTXT    dc.l    ErrInDTXTDat
  2541. ErrInDRTXT    dc.l    ErrInDRTXTDat
  2542. KeyGURU        dc.l    KeyGURUKey
  2543. KeyLAST        dc.l    KeyLASTKey
  2544. KeyDEFAULT    dc.l    KeyDEFAULTKey
  2545. KeyDOS        dc.l    KeyDOSKey
  2546. KeyABOUT    dc.l    KeyABOUTKey
  2547. KeyQUIT        dc.l    KeyQUITKey
  2548. Dummy3        dc.l    0
  2549. Dummy4        dc.l    0
  2550.  
  2551. ZoomSize    dc.w    50
  2552.         dc.w    0
  2553.         dc.w    200
  2554. TopBorder    dc.w    0
  2555.  
  2556. FakeBitmap    dc.w    0
  2557.         dc.w    0
  2558.         dc.b    0
  2559.         dc.b    1
  2560.         dc.w    0
  2561.         dc.l    0
  2562.         
  2563. Topaz        dc.l    TopazFont
  2564.         dc.w    8
  2565.         dc.b    0
  2566.         dc.b    1
  2567.         
  2568. GuruOffset    dc.b    1
  2569. DosOffsetTemp    dc.b    1
  2570.  
  2571. WinTitle    dc.b    'The Guru 3.00',0
  2572. ScrTitle    dc.b    'The Guru 3.00 ©1994 by E.Lensink',0
  2573.  
  2574. ReqTitle    dc.b    'Guru 3.0',0
  2575.  
  2576. Intname        dc.b    'intuition.library',0
  2577. Gfxname        dc.b    'graphics.library',0
  2578. Dosname        dc.b    'dos.library',0
  2579. Iconname    dc.b    'icon.library',0
  2580.  
  2581. AutoFront    dc.b    'AUTOFRONT',0
  2582. PubScr        dc.b    'PUBSCREEN',0    
  2583. Language    dc.b    'LANGUAGE',0
  2584. DataFile    dc.b    'DATAFILE',0
  2585. ForceTopaz    dc.b    'TOPAZ',0
  2586. DefLanguage    dc.b    'English.lang',0
  2587. DefData        dc.b    'Error.data',0
  2588.  
  2589. SetTXTDat    dc.b    'SET',0
  2590. GuruTXTDat    dc.b    'GURU',0
  2591. LastTXTDat    dc.b    'LAST',0
  2592. DefaultTXTDat    dc.b    'DEFAULT',0
  2593. DosTXTDat    dc.b    'DOS',0
  2594. InfoTXTDat    dc.b    'ABOUT',0
  2595. QuitTXTDat    dc.b    'QUIT',0
  2596. ErrDTXTDat    dc.b    'Error: Couldn''t open data file...',0
  2597. ErrDRTXTDat    dc.b    'OK',0
  2598. ErrInDTXTDat    dc.b    'Error in data file...',0
  2599. ErrInDRTXTDat    dc.b    'OH NO!',0
  2600. KeyGURUKey    dc.b    'G',0
  2601. KeyLASTKey    dc.b    'L',0
  2602. KeyDEFAULTKey    dc.b    'R',0
  2603. KeyDOSKey    dc.b    'O',0
  2604. KeyABOUTKey    dc.b    'U',0
  2605. KeyQUITKey    dc.b    'Q',0
  2606.  
  2607. Letters        dc.b    '1234567890ABCDEF'
  2608. GuruString    dc.b    '00000000',0
  2609. DosString    dc.b    '000',0
  2610.  
  2611. SGuruString    dc.b    '@NODE('
  2612. GuruStringTemp    dc.b    '00000000'
  2613.         dc.b    ')',0
  2614.         
  2615. SGuruHeader    dc.b    ' )',1
  2616.         dc.b    'Guru: '
  2617. SHeaderString    dc.b    '00000000',10
  2618.         dc.b    '@ENDNODE  '
  2619.  
  2620. SDosString    dc.b    '@NODE('
  2621. DosStringTemp    dc.b    '000'
  2622.         dc.b    ')',0
  2623.  
  2624. GenAl        dc.b    '@GENERAL',0
  2625. Sub1        dc.b    '@SUBSYS1',0
  2626. Sub2        dc.b    '@SUBSYS2',0
  2627. Sub3        dc.b    '@SUBSYS3',0
  2628. DosAl        dc.b    '@DOS',0
  2629. EndFile        dc.b    '@ENDFILE',0
  2630. Node        dc.b    '@NODE(',0
  2631. UnkGuru        dc.b    '@NODE(UNKNOWNGURU)',0
  2632. UnkDos        dc.b    '@NODE(UNKNOWNDOS)',0
  2633. Dead        dc.b    '@NODE(DEADEND)',0
  2634. Reco        dc.b    '@NODE(RECOVERY)',0
  2635. EndNode        dc.b    '@ENDNODE',0
  2636.  
  2637. AboutText    dc.b    ' )',1
  2638.         dc.b    'The Guru, version 3.00',10
  2639.         dc.b    'Compile date: November 8, 1994',10,10
  2640.         dc.b    'Created by E.Lensink entirely in assembly using '
  2641.         dc.b    'HiSoft Devpac 3.',10,10
  2642.         dc.b    'If you want to contact me for any reason, don''t hesitate '
  2643.         dc.b    'to write to:',10
  2644.         dc.b    'Emiel Lensink',10
  2645.         dc.b    'Notengaarde 33',10
  2646.         dc.b    '3992 JR, Houten',10
  2647.         dc.b    'Holland',10,10
  2648.         dc.b    'This program is postware, so if you like it, send '
  2649.         dc.b    'me a postcard of your hometown.',10
  2650.         dc.b    ' ',10
  2651.         dc.b    '@ENDNODE  '
  2652.  
  2653. TopazFont    dc.b    'topaz.font',0
  2654.  
  2655.     SECTION BSSZone,Bss
  2656.  
  2657. _IntuitionBase    ds.l    1
  2658. _GfxBase    ds.l    1
  2659. _DOSBase    ds.l    1
  2660. _IconBase    ds.l    1
  2661.  
  2662. WindowPtr    ds.l    1
  2663. WindowRastPort    ds.l    1
  2664. WindowUserPort    ds.l    1
  2665. ScreenLock    ds.l    1
  2666. ScreenFont    ds.l    1
  2667. WindowWidth    ds.l    1
  2668. DisplayWidth    ds.l    1
  2669.  
  2670. GeneralAlert    ds.l    1
  2671. Subsys1        ds.l    1
  2672. Subsys2        ds.l    1
  2673. Subsys3        ds.l    1
  2674. DosAlert    ds.l    1
  2675. EndOfFile    ds.l    1
  2676. UnknownDos    ds.l    1
  2677. UnknownGuru    ds.l    1
  2678. Recovery    ds.l    1
  2679. Deadend        ds.l    1
  2680.  
  2681.  
  2682. FakeBmSize    ds.l    1
  2683. FakeBmPtr    ds.l    1
  2684.  
  2685. Indicator1X    ds.l    1
  2686. Indicator1Y    ds.l    1
  2687. Indicator2X    ds.l    1
  2688. Indicator2Y    ds.l    1
  2689.  
  2690. Font        ds.l    1
  2691. FontY        ds.w    1
  2692. FontBase    ds.w    1
  2693.  
  2694. FakeRast    ds.l    1
  2695. Temp        ds.l    1
  2696.  
  2697. Widest        ds.l    1
  2698. WidLett        ds.l    1
  2699. WidArrow    ds.l    1
  2700.  
  2701. LangSize    ds.l    1
  2702. LangBuff    ds.l    1
  2703. DataSize    ds.l    1
  2704. DataBuff    ds.l    1
  2705. PrintHandle    ds.l    1
  2706.  
  2707. LeftBorder    ds.w    1
  2708. Execvers    ds.w    1    
  2709. CursY        ds.w    1
  2710. ScreenColorMap    ds.l    1
  2711.  
  2712. tt_AutoFront    ds.b    1
  2713. tt_PubScreen    ds.b    1
  2714. tt_Topaz    ds.b    1
  2715. GuruOffsetTemp    ds.b    1
  2716. DosOffset    ds.b    1
  2717. FoundErr    ds.b    1
  2718. Corrected    ds.b    1
  2719. TempPrintBuff    ds.b    2560
  2720. ShinePen    ds.b    1
  2721. DarkPen        ds.b    1
  2722. ScreenDepth    ds.b    1
  2723.  
  2724.     SECTION    Gadgets,Data
  2725.     
  2726. WinGads    include    Gadgets.i
  2727.  
  2728.     SECTION    Logo,Data_C
  2729.     
  2730.     include    GuruLogo.i